#mysql
#mysql
Вопрос:
Проблема очень похожа на систему голосования stack exchange. Я хотел бы запросить таблицу объектов для случайного объекта, а также получить обратно все голоса, которые указанный пользователь имеет по этому объекту.
objects table:
id
user_id
message
votes table:
object_id
user_id
vote_value
select * from objects order by RAND()
создает случайный объект, но как я могу выбрать значение голоса конкретного пользователя для этого объекта в том же запросе? Возможно, что пользователь никогда не голосует за результирующий объект, поэтому я не могу просто выполнить объединение по id / object_id.
Комментарии:
1. Каким должен быть результат, если пользователь не голосовал за объект?
2. это должен быть просто идентификатор объекта и сообщение
Ответ №1:
Этот запрос будет напечатан NULL
для user_id
и vote_value
, если пользователь (в данном случае 1
) не проголосовал за объект:
SELECT o.id, v.user_id, v.vote_value
FROM objects o LEFT OUTER JOIN votes v ON o.id = v.object_id AND v.user_id = 1
WHERE v.user_id = 1 OR v.user_id IS NULL
ORDER BY RAND() LIMIT 1;
Комментарии:
1. Вы также могли бы использовать
IFNULL()
для печати всего, что вы хотите, вместоNULL
: dev.mysql.com/doc/refman/5.0/en /…