1

これが私のSQLクエリです:

select
  t1.id, t1.text as text, l.likes as likecount
from
  table1 as t1 left join (select feed_id, count(user_id) as likes
                          from likes
                          where feed_id=12345) l
  on t1.id=l.feed_id where t1.id=12345

このクエリは、特定のエントリを 1 つ取得し、そのエントリを気に入った人の数を示します。この例では、エントリ番号は 12345 です。エントリに少なくとも 1 つの「いいね」がある場合、このクエリは正常に機能しています。しかし、いいねのないエントリに対してこのクエリを実行すると、列フィードを null にすることはできないというエラーが表示されます。

このエラーの理由は、内部クエリが feed_id null と likes 0 の行を返し、テーブルの結合に問題が生じているためです。もう 1 つの興味深い要因は、このファイルがローカル サーバーでは動作しているが、ライブ サーバーでは動作していないことです。

4

2 に答える 2

2

使用できる WHERE 句は 1 つだけです。

select
  t1.id, t1.text as text, l.likes as likecount
from
  table1 as t1 left join (select feed_id, count(user_id) as likes
                          from likes
                          group by feed_id) l
  on t1.id=l.feed_id
where t1.id=12345

サブクエリでは必要ありませんが、代わりに GROUP BY 句を使用する必要があります。

ただし、おそらくこれを使用して上記のクエリを単純化できます。

SELECT
  t1.id, t1.text, COUNT(DISTINCT likes.user_id) likecount
FROM
  table1 as t1 LEFT JOIN likes
  ON t1.id = likes.feed_id
WHERE
  t1.id = 12345
于 2013-05-03T20:03:51.553 に答える
1

group by feed_id内部クエリに追加してみてください:

select
  t1.id, t1.text as text, l.likes as likecount
from
  table1 as t1 left join (select feed_id, count(user_id) as likes
                          from likes
                          where feed_id=12345
                          group by feed_id) l
  on t1.id=l.feed_id where t1.id=12345
于 2013-05-03T20:03:46.707 に答える