【问题标题】:How do I join the column even if if it's null? in PHP/MYSQL即使它为空,我如何加入该列?在 PHP/MYSQL
【发布时间】:2017-03-20 20:46:27
【问题描述】:

我有一个查询,它显示一个子类别下的问题和一个类别下的更多问题,因为一个类别下有一个子类别。这是我的代码

SELECT 
   a.* 
FROM question a 
LEFT JOIN category b on a.question_subcat = b.category_id 
WHERE b.parentcategoryid  = $question

如何包含显示带有空值的 question_subcat 而不仅仅是带有值的问题?由于并非我所有的问题都必须在一个子类别下,它可以只是在一个类别下,而不是在任何使其为空的子类别下。如何显示?

【问题讨论】:

  • 尝试将b.parentcategoryid = $question 移至ON 子句。
  • 这可能很复杂,但对于嵌套数据集来说非常灵活和快速(查询性能)。 mikehillyer.com/articles/managing-hierarchical-data-in-mysql
  • 我不明白,请问您可以用代码格式回复吗? @GiorgosBetsos
  • $question 包含什么:子类或主类 id。为什么将子类别 id 存储在 question.question_subcat 中 - 从我的角度来看问题应该只有一个 parentcategory_id
  • LEFT JOIN category b on a.question_subcat = b.category_id AND b.parentcategoryid = $question。无论是否存在相关的category,这都会返回所有个问题。

标签: mysql left-join inner-join


【解决方案1】:

左外连接应该给你你想要的东西!如果您删除 WHERE 条件,您的所有question_subcat 为空的问题都会出现。

无论如何我不完全了解您的要求,但您需要在父表上进行过滤或提供替代 where 条件。

想一想:left out join 只返回 a 的所有表行和表 b 的行,只返回它们存在的地方(意味着 b.* 为空)——没有问题。但是您的 where 过滤器 b.parentcategoryid 使用 $question => b.parentcatoryid 如果未找到则为 null => where filter 将其踢出。

【讨论】:

    猜你喜欢
    • 2011-06-04
    • 2013-10-29
    • 2013-12-11
    • 2023-03-18
    • 2023-02-07
    • 1970-01-01
    • 1970-01-01
    • 2015-11-11
    • 2014-09-25
    相关资源
    最近更新 更多