Знатокам. Подскажите, как составить запрос.

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