0

このSQLクエリを実行しています

$sql = "select images.image, images.comment as feedDescription, 
        customers.fullName, CONCAT('[', GROUP_CONCAT(DISTINCT likes.uid),']') as likes, 
        CONCAT('[', GROUP_CONCAT(DISTINCT CONCAT('{\"userid\":\"', comments.fid, '\", \"comment\":\"', comments.comment, '\"}') separator ','),']') as comments 
        FROM images 
        LEFT JOIN customers on images.client_id = customers.client_id 
        LEFT JOIN likes on images.image = likes.image 
        LEFT JOIN comments on images.image = comments.image 
        WHERE images.fid=:userID 
        ORDER BY images.image LIMIT $offset,$limit";

唯一の問題は、最初の行だけを取得していることです...

画像テーブル、顧客テーブル(画像で取得したIDで顧客の名前を取得)、いいねテーブル(画像に「いいね」をした人)、コメント(テーブルに「コメント」を書いた人)があります

4

1 に答える 1

1

クエリで集計関数を使用しているため、MySQL は自動的に 1 つの行 (すべてのデータの集計) のみを返します。

他のデータベースでは、集計された列と集計されていない列が混在しているため、これによりエラーが発生します。これは、「隠し列」と呼ばれる MySQL の (誤った) 機能です。

問題を解決するには、クエリに group by を追加します。

group by images.image, images.comment, customers.fullName

これは、必ず WHERE 句の後、ORDER BY の前に追加してください。

于 2012-08-28T14:23:06.640 に答える