Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Осуществление выборки

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: SQL выборка
AlexAnder
Отправлено: 14 Июня, 2013 - 09:59:26
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 915
Дата рег-ции: Авг. 2012  
Откуда: Россия


Помог: 34 раз(а)




Нужно вывести дату урока, имя учителя, и название курса.
Не долго думая сообразил 2 запроса, оба выводят то, что нужно, но в чём между ними разница и какой когда следует использовать?
"Вариант #1" пишет:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT l.lesson_date AS  `date` , t.name AS teacher, c.title AS course
  2. FROM courses AS c, teachers AS t, lessons AS l
  3. WHERE l.course = c.id
  4. AND l.teacher = t.id
  5. ORDER BY  `date` ASC
  6. LIMIT 0 , 30


"Вариант #2" пишет:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT l.lesson_date AS  `date`, t.name AS teacher, c.title AS course
  2. FROM lessons l
  3. LEFT JOIN teachers t ON l.teacher = t.id
  4. LEFT JOIN courses c ON l.course = c.id
  5. ORDER BY `date` ASC
  6. LIMIT 0, 30


courses пишет:
Спойлер (Отобразить)

lessons пишет:
Спойлер (Отобразить)

teachers пишет:
Спойлер (Отобразить)

(Отредактировано автором: 14 Июня, 2013 - 10:02:31)



-----
Оказывается, недостаточно читать справочники, чтобы правильно писать коды. sadex ©

Форумы стали местом обучения программированию, а не решения трудных вопросов. KingStar ©
 
 Top
EuGen Администратор
Отправлено: 14 Июня, 2013 - 10:04:39
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Разница в том, что первый пример даст обычный JOIN, а второй - LEFT JOIN. (Поясню - LEFT JOIN для несуществующих строк левой таблицы возьмёт из правой NULL-значения, в отличие от обычнго JOIN)


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
AlexAnder
Отправлено: 14 Июня, 2013 - 10:13:18
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 915
Дата рег-ции: Авг. 2012  
Откуда: Россия


Помог: 34 раз(а)




Спасибо, вроде разобрался Улыбка

Кстати, вот очень полезная картинка. Может кому-нибудь понадобиться.

Нажмите для увеличения


-----
Оказывается, недостаточно читать справочники, чтобы правильно писать коды. sadex ©

Форумы стали местом обучения программированию, а не решения трудных вопросов. KingStar ©
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB