Существует ли строка в другой таблице? - PullRequest
0 голосов
/ 14 сентября 2009

Столы


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 ]

2 голосов
/ 15 сентября 2009

вам нужно добавить AND file_logs.user_id = published_file_ratings.author_id к вашему предложению JOIN

Вы также можете изменить свой оператор IF на IF(ISNULL(published_file_ratings.author_id), FALSE, TRUE)

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

0 голосов
/ 15 сентября 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...