我有一个问题:
SELECT info.pID, Name, Addr, Phone, GROUP_CONCAT(URL) as URL FROM info, images WHERE info.pID = images.pID AND place='$place';
即使没有找到结果,也会创建一行(如num_rows和js .length所述),任何想法为什么?发生这种情况并不常见。
JSON结果打印:
[{"0":null,"pID":null,"1":null,"Name":null,"2":null,"Addr":null,"3":null,"Phone":null,"4":null,"URL":null}]
答案 0 :(得分:3)
这是因为GROUP_CONCAT
:所有聚合函数都有类似的行为,执行查询并在构建结果集时执行concat。如果没有结果,则它会连接NULL,并被添加到其他空的结果集中。如果一个字段包含一个值(在这种情况下是函数返回的NULL),则显示所有其他字段(显然)。
这解释了1行结果,其中一切都为null。删除group_concat,您将不会得到任何结果。试想一下其他聚合函数COUNT()
在相同情况下的行为方式。
Here's a list of all aggregating functions
答案 1 :(得分:0)
可能有其他列包含使用place='$place'
SELECT
之前FROM
之后的部分仅过滤您从查询的其余部分获得的结果。因此,如果FROM info, images WHERE info.pID = images.pID AND place='$place';
找到了您有结果的内容。然后,您过滤结果并仅选择可能为空的特定列,从而得出结果。