2013-09-22 72 views
0

我有一個MySQL語句的問題。LIMIT在mysql子查詢

我有這樣的:

SELECT ad.*, 
    (SELECT img.image 
    FROM '.$this->config->db_prefix.'_images AS img 
    WHERE img.aid = ad.aid LIMIT 1) AS img 
FROM '.$this->config->db_prefix.'_adverts ad 
WHERE fid = :fid 
ORDER BY cr_date DESC 

,工作正常,但我需要從_images表中獲取的所有圖像,所以如果我刪除LIMIT 1我得到

Cardinality violation: 1242 Subquery returns more than 1 row 

結果從SQL是輸出爲JSON。

回答

1

您可以使用MySQL的GROUP_CONCAT()聚合函數:

SELECT ad.*, (SELECT GROUP_CONCAT(img.image) FROM '.$this->config->db_prefix.'_images AS img WHERE img.aid = ad.aid) AS img FROM '.$this->config->db_prefix.'_adverts ad WHERE fid = :fid ORDER BY cr_date DESC 

再後來explode()它在PHP或split()它的JavaScript。

+0

這很好用! –

1

你遇到的問題是,當你說select時,mysql希望一次只能得到一個條目。看看mysql JOIN語句。

http://dev.mysql.com/doc/refman/5.0/en/join.html

select ad.*, img.image 
from TABLE1 ad 
JOIN TABLE2 img on ad.aid = img.aid 
WHERE CONDITION 
ORDER BY cr_date DESC. 
+0

感謝格式化Johan! –