2

次のような 2 つのテーブルがあります。

最初の TableName :投票

|   type   |     item_id     |   user_id   |
""""""""""""""""""""""""""""""""""""""""
|   like    |       45       |    james    |
|   like    |       45       |    George   |
|  dislike  |       32       |     Paul    |

2 番目の TableName :アイテム

|    item_id     | item_name |
""""""""""""""""""""""""""""""
|       32       |     USB   |
|       45       |     TV    |
|       57       |     Game  |

投票数に応じて、アイテムを順番に表示したいと思います。このようなもの :

 TV    - >   2
 USB   - >   1
 Game  - >   0

私はこのようなことを試します:

SELECT items.item_name
FROM items INNER JOIN (
    SELECT item_id,COUNT(item_id) as vote
    FROM votes 
    HAVING COUNT(item_id) > 1
    ORDER BY COUNT(item_id) DESC
) AS votes ON votes.item_id= items.item_id 
WHERE items.item_id= 'item_id'

しかし、何もありません。私を助けてください。

4

3 に答える 3

1

クエリにはいくつかの問題がありました。まず、where不要な句があり、すべてを除外する可能性があります。2 つ目は、having項目を除外する句もあります。

投票数で並べ替えられたすべてのアイテムを取得する場合は、 も必要ですleft outer join。一部のアイテムには投票がない可能性があるためです。

SELECT items.item_name
FROM items LEFT OUTER JOIN
     (SELECT item_id, COUNT(item_id) as vote
      FROM votes 
      HAVING COUNT(item_id) > 1
      ORDER BY COUNT(item_id) DESC
     ) AS votes
    ON votes.item_id = items.item_id
ORDER BY coalesce(votes.vote, 0) desc;

そして最後に、好き嫌いを区別せずに「投票」と言います。これは意図的なものだと思います。

于 2013-09-04T21:12:12.850 に答える