gpt4 book ai didi

php - 即使一个表没有结果,MySQL 是否可以生成一个查询以从多个表中获取?

转载 作者:行者123 更新时间:2023-11-28 23:34:59 24 4
gpt4 key购买 nike

我遇到了一个问题:

我正在构建一个论坛,这个论坛有几个表,我试图在一个查询中获取评论和用户信息。

到目前为止,这应该很容易,问题是我无法更改结构,如果有喜欢的答案,通过以下查询我会得到一个完美的结果。如果没有人喜欢这个答案,它就失败了。

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com