Знатокам. Подскажите, как составить запрос.
1.
Валерий (04.01.2011 / 10:05)
есть таблицы
users: id (int)
files: id(int), user_id (int)
comments: id(int), file_id (int), user_id(int), text (text)
Зная id юзера, необходимо вывести из базы id файла, к которому нет комментариев, оставленных этим юзером.
Если бы нужно было вывести id файла, к которому юзер оставил комментарии, я бы сделал так:
SELECT files.id
FORM files,comments
WHERE comments.user_id='$user_id' AND files.id=comments.file_id
Но мне нужно вывести файл, к которому нет комментариев данного пользователя.
2.
Дмитрий (04.01.2011 / 10:18)
comments.user_id<>'$user_id'
3.
Валерий (04.01.2011 / 10:21)
хм.. не подумал. Попробую.
4.
KOZZ (04.01.2011 / 10:22)
2.
LondoN_tm, стыдно спрашивать, но что значит <> ?
5.
Валерий (04.01.2011 / 10:26)
мм.. опять не подумал.. Не выйдет же так.
Будет находить комментарии других пользователей, и выводить этот файл, не смотря на то, что данный пользователь тоже комментировал его.
Ещё варианты?
6.
Дмитрий (04.01.2011 / 10:30)
4.
Ботаник eGo, не равно. Гы.
SELECT files.id
FROM files,comments
WHERE comments.user_id <> '$user_id' AND files.id <> comments.file_id
7.
Валерий (04.01.2011 / 10:44)
Да не то это.
8.
Олег (04.01.2011 / 19:30)
Вопрос поставлен не совсем корректно. У тебя есть id пользователя.Тебе необходимо найти все файлы у пользователя с данным id при условии что эти файлы никто не комментировал?
Если все именно так, тогда используй следущий запрос
SELECT
files.id FROM files
JOIN
users ON users.id = files.user_id
LEFT JOIN
comments ON comments.user_id = users.id
WHERE
users.id = 1 AND comments.file_id IS NULLL
9.
Валерий (04.01.2011 / 19:46)
Нет, не так. Нужно было найти все файлы, которые этот пользователь не комментировал.
Я нашёл ответ..
SELECT files.id
FROM files
WHERE
NOT EXISTS (
SELECT id FROM comments WHERE file_id=files.id AND user_id=?
)
URL:
https://visavi.net/topics/17267