2009-09-14 2 views
0

Столы

file_logsЕсть ли строка, которая является другой таблицей?

  • file_id
  • user_id

файлы

  • ID
  • имя
  • и т.д ...

published_ratings

  • AUTHOR_ID
  • file_id
  • комментарий
  • и т.д ...

Сценарий


Я создаю журнал загрузки и должен отображать, какие файлы пользователь оценил, а также бездействующие, это должно быть сделано с помощью 1 запроса.

Я уже взял трещину в этом,

SELECT 
    files.*, 
    IF(file_logs.user_id = published_file_ratings.author_id, TRUE, FALSE) AS rated 
FROM file_logs 
JOIN files 
    ON file_logs.file_id = files.id 
LEFT JOIN published_file_ratings 
    ON file_logs.file_id = published_file_ratings.file_id 
WHERE file_logs.user_id = 8 
GROUP BY id 

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

Результат должен быть массивом всех файлов, загруженных пользователем с помощью «рейтингового» столбца, изображающего, если они оценили файл или нет.

Любая помощь: действительно оценен.

ответ

2

вам необходимо добавить к вашему AND file_logs.user_id = published_file_ratings.author_id РЕГИСТРИРУЙТЕСЬ п

вы также можете изменить IF заявление IF(ISNULL(published_file_ratings.author_id), FALSE, TRUE)

также, теперь вы можете удалить GROUP BY, чтобы скрыть несколько пользователей. его использование здесь таким образом неверно.

+0

Perfect, спасибо * очень * много. –

0

Вы не можете сделать «GROUP BY id», а затем выбрать остальные столбцы. Это не имеет смысла. Любая другая БД, чем MySQL, выдавала бы ошибку, если бы вы попытались выбрать столбцы, которые не были в Group By, или содержались в агрегированном выражении, таком как SUM (ColName).

Смежные вопросы