[英]Symfony 3 returns wrong query results when using left join on Many-To-Many table
[英]Basic many-to-many left join query
所以我有3张桌子:
我想查询返回所有可用的成就,并提及当前用户(例如,id_user = 123)已解锁的成就。
我怎样才能做到这一点? 这应该涉及一个左联接,但是如果我添加“ WHERE id_user = 123”,它将不会使我锁定成就。
谢谢!
尝试这个
SELECT ac.*,
CASE WHEN un.ach_id IS NULL THEN 0
ELSE 1 END AS user_unlocked
FROM achievements ac
LEFT JOIN
(SELECT au.ach_id FROM achievements_unlocked au
INNER JOIN users u ON au.user_id = u.id
WHERE u.id = 123) un
ON ac.id = un.ach_id
Select *
From achievements
Left Outer Join achievements_unlocked On achievements_unlocked.achievement_id = achievements.achievement_id
Left Outer Join users On
users.user_id = achievements_unlocked.user_id And
users.user_id = 123
这可能是最有效的方法,而不必在执行计划中进行嵌套循环和哈希匹配。 确保在包含它们的所有表上的achievement_id和user_id列上都有索引。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.