即使没有结果,也存在一行

时间:2012-09-11 11:46:23

标签: php mysql

我有一个问题:

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}]

2 个答案:

答案 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';找到了您有结果的内容。然后,您过滤结果并仅选择可能为空的特定列,从而得出结果。