我遇到了一个问题:
我正在构建一个论坛,这个论坛有几个表,我试图在一个查询中获取评论和用户信息。
到目前为止,这应该很容易,问题是我无法更改结构,如果有喜欢的答案,通过以下查询我会得到一个完美的结果。如果没有人喜欢这个答案,它就失败了。
Select
mfr.mfr_forum_answers.id,
mfr.mfr_forum_answers.date_created,
mfr.mfr_forum_answers.last_updated,
mfr.mfr_forum_answers.content,
mfr.mfr_forum_answers.accepted,
mfr.mfr_forum_answers.user_id,
mfr.mfr_users.level,
mfr.mfr_users.avatar,
mfr.mfr_forum_likes.subject_id,
mfr.wp_users.ID As ID1,
mfr.mfr_forum_topics.user_id As owner_id,
(SELECT count(mfr.mfr_forum_likes.id) FROM mfr.mfr_forum_likes WHERE mfr.mfr_forum_likes.subject_id = :id AND mfr.mfr_forum_likes.type = 'answer') as likes,
(SELECT count(mfr.mfr_forum_likes.id) FROM mfr.mfr_forum_likes WHERE mfr.mfr_forum_likes.subject_id = :id AND makefitreal.mfr_forum_likes.type = 'answer' AND mfr.mfr_forum_likes.user_id = :sessionId ) as i_like,
mfr.wp_users.user_nicename
From
mfr.mfr_forum_likes Inner Join
mfr.mfr_forum_answers
On mfr.mfr_forum_answers.topic_id =
mfr.mfr_forum_likes.subject_id Inner Join
mfr.mfr_users
On mfr.mfr_forum_answers.user_id = mfr.mfr_users.id
Inner Join
mfr.wp_users
On mfr.mfr_users.id = mfr.wp_users.ID Inner Join
mfr.mfr_forum_topics
On mfr.mfr_forum_answers.topic_id = mfr.mfr_forum_topics.id
Where
mfr.mfr_forum_answers.topic_id = :id
And
mfr.mfr_forum_likes.type = 'answer'
据我所说,只有在答案有赞时才会返回,我正在考虑向默认发布答案的用户添加一个添加项,但我正在尝试通过解决新问题来提高我的技能。
如果有人建议我如何克服如果表为空,查询将继续这一事实,我将非常感激。
提前致谢-
呵呵
最佳答案
是的。你要找的是left and right joins .根据documentation ,使用 LEFT JOIN
您仍然可以正常连接两个表,但是
If there is no matching row for the right table in the ON or USING part in a LEFT JOIN, a row with all columns set to NULL is used for the right table.
这意味着您可以尝试连接两个表,但如果某行没有任何结果,它仍会返回第一个表的结果。 RIGHT JOIN
也是如此,只是它以相反的方式工作:如果被加入的表有结果,但原始表没有,它将返回结果。
看起来您有 3 个表用于 3 个关系:有答案、用户给出答案以及答案可能会或可能不会喜欢。要获取此数据,我建议从您的 answers
表开始,对您的 users
表执行 INNER JOIN
(假设始终有用户) ,以及 likes
表中的 LEFT JOIN
。这是一个简单的例子:
SELECT *
FROM answers
INNER JOIN users ON users.id = answers.user_id
LEFT JOIN likes ON likes.answer_id = answer.id
WHERE answers.id = :id
AND likes.type = 'answers'
当然,如果出于某种未知原因您需要从您的likes
表开始,那么您必须RIGHT JOIN
其他表。我希望这能让您更好地了解如何进行查询。
关于php - 即使一个表没有结果,MySQL 是否可以生成一个查询以从多个表中获取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36043667/