2016-04-28 62 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子句中。

相關問題