Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: JOIN из 3 таблиц?
 
 автор: Alph[p]a   (07.04.2011 в 15:32)   письмо автору
 
 

Есть 3 таблицы вот структура
id     from     to     filename     count_download     date     info     flag 
id     to     from     time     name     message     reading
id     filename     to     time     desc     from     flag


Как мне выбрать все записи где flag reading и flag =0 ?

  Ответить  
 
 автор: cheops   (07.04.2011 в 16:23)   письмо автору
 
   для: Alph[p]a   (07.04.2011 в 15:32)
 

А через какие поля эти таблицы связаны друг с другом? И какие поля нужны выбрать?

  Ответить  
 
 автор: Alph[p]a   (07.04.2011 в 16:33)   письмо автору
 
   для: cheops   (07.04.2011 в 16:23)
 

нужно получить все записи у которых поля flag flag и reading =0

  Ответить  
 
 автор: cheops   (07.04.2011 в 16:35)   письмо автору
 
   для: Alph[p]a   (07.04.2011 в 16:33)
 

Это понятно, не понятно для чего используется JOIN, собственно это даже не имеет значения, имеет значение способ объединения этих трех таблиц. Данные в этих таблицах как-то связаны друг с другом? Почему потребовался один запрос, а не три отдельных?

PS Это я не из вредности спрашиваю, просто эта информация нужна, чтобы составить условия объединения :)

  Ответить  
 
 автор: Alph[p]a   (07.04.2011 в 16:37)   письмо автору
 
   для: cheops   (07.04.2011 в 16:35)
 

я хочу одним запросом выбрать просто. никак не связаны данные, внешнего ключа нету.
просто надо где у этих полей 0 вывести.

делаю так
SELECT flag FROM iao_order WHERE flag='0' UNION 
SELECT flag FROM iao_stream WHERE flag='0' UNION
SELECT reading FROM iao_message WHERE reading='0'


одна запись... хотя должно 6!

  Ответить  
 
 автор: cheops   (07.04.2011 в 17:12)   письмо автору
 
   для: Alph[p]a   (07.04.2011 в 16:37)
 

Все правильно делаете, но у UNION-а есть особенность, он по умолчанию дублирующие записи убирает, чтобы отключить такое поведение нужно использовать форму UNION ALL
SELECT flag FROM iao_order WHERE flag='0' UNION ALL
SELECT flag FROM iao_stream WHERE flag='0' UNION ALL
SELECT reading FROM iao_message WHERE reading='0'

  Ответить  
 
 автор: Alph[p]a   (08.04.2011 в 08:11)   письмо автору
 
   для: cheops   (07.04.2011 в 17:12)
 

спасибо! то что надо! не знал про ALL

  Ответить  
 
 автор: Alph[p]a   (08.04.2011 в 08:45)   письмо автору
 
   для: Alph[p]a   (08.04.2011 в 08:11)
 

SELECT flag,to FROM iao_order WHERE flag='0' AND to='37' UNION ALL
SELECT flag,to FROM iao_stream WHERE flag='0' AND to='37' UNION ALL
SELECT flag,to FROM iao_certificate WHERE flag='0' AND to='37' UNION ALL
SELECT reading,to FROM iao_message WHERE reading='0' AND to='37'

ответ по полю to идет вида - [BLOB - 2Байт]
почему??!

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования