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

Форум MySQL

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

 

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

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

тема: Выборка более чем из двух таблиц
 
 автор: AlexHog   (17.11.2006 в 13:39)   письмо автору
 
 

Здравствуйте.
У меня есть таблица комментариев, хранящая
. ключ id_comment;
. имя оставившего коммент author;
. собственно коммент descript;
. время time
. переменную type, описывающую к чему именно он был оставлен - статья, рисунок, профиль другого участника (то есть существуют таблица статей, таблица рисунков, таблица участников);
. id записи, к которой он оставлен to_whom.

Так, если type = "s", to_whom = 120 - комментарий оставлен для статьи с id = 120.


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

Для этого нужно сделать выборку из таблиц comments, stories, pictures и users.
Я пишу следующий код:


SELECT comments.id_comment, comments.author, comments.time, comments.type, stories.name, pictures.name, users.name
FROM comments, stories, pictures, users
WHERE stories.id_story = comments.to_whom, pictures.id_pic = comments.to_whom, users.id_user = comments.to_whom
ORDER BY comments.time


Получаю ошибку от mysql, указывающаю на запятую разделяющую условия.
Можно ли в принципе сделать такую выборку, как правильно задать условия?

   
 
 автор: elenaki   (17.11.2006 в 13:48)   письмо автору
 
   для: AlexHog   (17.11.2006 в 13:39)
 

а зачем там запятая? условия разделяются словами OR или AND в зависимости от требований

   
 
 автор: AlexHog   (17.11.2006 в 14:08)   письмо автору
 
   для: elenaki   (17.11.2006 в 13:48)
 

так... спасибо, что-то получилось.
поставил AND - получил выборку из шести комментов, вместо 24.
поставил OR - повесил машину :)
буду разбираться...

   
 
 автор: AlexHog   (17.11.2006 в 14:54)   письмо автору
 
   для: elenaki   (17.11.2006 в 13:48)
 

Так...

"AND" требует, чтобы to_whom = id_story = id_pic = id_user; если хотя бы в одной из таблиц нет записи с таким id, mysql вернет нулевой результат и возьмет следующий to_whom.

"OR" - берет имя из таблицы stories, затем перебирает с этим именем все имена из таблиц pictures и users. Получается выборка порядка миллиона записей - 25 комментов * 150 статей * 250 картинок.

Попробовал вставить дополнительное условие: выбирать из той таблицы, которую задает type:

SELECT comments.id_comment, comments.author, comments.time, comments.type, stories.name AS sname, pictures.name AS pname
FROM comments, stories, pictures
WHERE (stories.id_story = comments.to_whom IF comments.type = 's')
OR (pictures.id_pic = comments.to_whom IF comments.type = 'p')
ORDER BY comments.time

Получаю ошибку примерно рядом с OR. Почему? Как правильно задать такое условие?

   
Rambler's Top100
вверх

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