2016-04-28 63 views
1

我执行这个查询如何解决子查询返回超过10行错误

$sql=mysql_query("SELECT c.*, 
    (SELECT Count(b.text) From tbl_people_comment Where b.idsms=c.id AND b.visible=1) AS ccomment 
FROM tbl_peoplesms AS c 
INNER JOIN tbl_people_comment AS b ON b.idsms= c.id 
WHERE c.visible=1 
GROUP BY c.id"); 

我试图让它返回这样的事情在PHP

[ 
     { 
     "id":"20", 
     "name":"test", 
     "text":"test", 
     "visible":"1", 
     "ccomment":"5" 
     }, 

     { 
     "id":"19", 
     "name":"test", 
     "text":"test", 
     "visible":"1" 
     "ccomment":"7" 
     } 
    ] 

我使用此代码显示它

while($row=mysql_fetch_assoc($sql)) 
$output[]=$row; 
print(json_encode($output, JSON_UNESCAPED_UNICODE)); 

但是,我收到错误子查询返回多于1行。

这是tbl_peoplesms tbl_peoplesms

和tbl_people_comment tbl_people_comment

+1

所以你需要重写子查询,只返回一行。简单的解决方案是给子查询添加“LIMIT 1”,但是鉴于您似乎并不指望多行被返回,您可能在别处遇到问题。虽然看着你的查询,但它不可能返回多行。你确定这是正确的查询吗? –

+0

我添加了我的表格。可以为我写一个查询吗? –

+0

其实在你的问题查询不应该给你提到的错误。因为你的子查询是一个'select count()',没有'group by' ......你没给我们提供原始的错误代码 –

回答

2

而不是使用内联子查询,只是左连接上tbl_peoplesms tbl_people_comment和移动b.visible=1状态进入连接语句:

SELECT c.name, count(b.text) as ccomment 
FROM tbl_peoplesms AS c 
LEFT JOIN tbl_people_comment AS b ON b.idsms= c.id and b.visible=1 
GROUP BY c.name 

如果您想在选择列表中包含来自tbl_people_comment表的更多字段,则将它们添加到group by子句中。

相关问题