php - MYSQL 连接返回 Null 值

标签 php mysql sql

我有一个连接两个表的查询,使用 GROUP_CONCAT 获取逗号分隔的列表,然后将其映射到对象中的数组

SQL:

    $sql = "SELECT *,
            GROUP_CONCAT(climb_attributes.attribute_id) as climb_attributes
            FROM climbs
            LEFT JOIN climb_attributes ON
            (climbs.id = climb_attributes.climb_id)
            GROUP BY climb_id
            ORDER BY climbs.id";

PHP

$all_climb_profiles[$climb->id]->attributes = explode(",", $climb->climb_attributes);

几乎完美地工作,除了我目前仅在climb_attributes表包含攀爬ID时才返回结果。本质上,即使没有任何属性,攀登仍然可以存在,但目前它必须在结果中返回一个属性。

我还需要将其连接到另一个表以获取属性 id 的属性名称...如果您也能提供帮助,那就太好了,我希望我能弄清楚这一点。

最佳答案

首先,在使用 group by 时,不应使用 * 从所有表中进行选择。您可以安全地从 climb 表中获取所有列。

问题是您正在聚合第二个表中的列,而不是第一个表。并且,如果没有匹配,则为NULL。因此,更好的查询是:

SELECT c.*, GROUP_CONCAT(ca.attribute_id) as climb_attributes
FROM climbs c LEFT JOIN
     climb_attributes ca
     ON c.id = ca.climb_id
GROUP BY c.id
ORDER BY c.id;

编辑:

如果你想列出字符串,那么这样的事情应该可以工作:

SELECT c.*, GROUP_CONCAT(a.name) as climb_attributes
FROM climbs c LEFT JOIN
     climb_attributes ca
     ON c.id = ca.climb_id LEFT JOIN
     attributes a
     ON ca.attribute_id = c.id
GROUP BY c.id
ORDER BY c.id

关于php - MYSQL 连接返回 Null 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29373231/

相关文章:

mysql - INTO OUTFILE 连接列

MySQL 准备语句表 3

mysql - 在一个sql查询中选择不同时间集中的结果

sql - 以编程方式从文件导入数据库?

php - 拉维尔 5.7 : A facade root has not been set

mysql - 如何将 SELECT 语句的返回值传递给存储过程中的 DELETE 查询?

php - 如何通过AJAX发送数据库中的ID(唯一)

sql - Hive描述扩展表返回json

php - 求和两个复杂的选择

php - 获取最后保存的对象 ID