|
|
|
| Здравствуйте.
У меня есть таблица комментариев, хранящая
. ключ 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, указывающаю на запятую разделяющую условия.
Можно ли в принципе сделать такую выборку, как правильно задать условия? | |
|
|
|
|
|
|
|
для: AlexHog
(17.11.2006 в 13:39)
| | а зачем там запятая? условия разделяются словами OR или AND в зависимости от требований | |
|
|
|
|
|
|
|
для: elenaki
(17.11.2006 в 13:48)
| | так... спасибо, что-то получилось.
поставил AND - получил выборку из шести комментов, вместо 24.
поставил OR - повесил машину :)
буду разбираться... | |
|
|
|
|
|
|
|
для: 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. Почему? Как правильно задать такое условие? | |
|
|
|