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

标签 php mysql

我遇到了一个问题:

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

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

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/

相关文章:

javascript - 如何在 Bootstrap 模式中使用 Laravel 命令?

php - pdftk 错误 : Failed to open PDF file:

OpenShift 上的 MySQL/CodeIgniter 配置

php - 使用 PHP 脚本写入在线 SQL 数据库

php - 在更改和页面加载时执行 jQuery 函数?

PHP 发生重叠日期范围时的金额求和

php - 如何设置 codeigniter 多级菜单的样式?

php - Instagram API 如何获取用户 ID?

mysql - 运行子查询?

php - 通过 ffmpeg 从视频创建缩略图