2

この質問が聞かれた可能性があることは知っていますが、これは検索機能で見つけたものよりも少し複雑だと思います.

PHP コードを使用して、MySQL テーブルからの結果を、別のテーブルからの出現回数 (存在する場合) で並べ替えたいと考えています

具体的に説明させてください。

私は2つのテーブルを持っています:

次の非網羅的なコンテンツを含む「投稿」と呼ばれる最初のテーブル:

  • ID
  • ...

次の非網羅的な内容を含む「post_votes」と呼ばれる 2 番目のテーブル:

  • ID
  • post_id
  • ユーザーID
  • ...

実際には、ユーザーが既存の投稿 (「post」テーブルにリストされているもの) に投票すると、「post_votes」テーブルにレコードが作成され、投稿 ID が post_id として、ユーザー ID が user_id として挿入されます。したがって、複数のユーザーが投稿に投票した場合、0 から数回の投稿が存在する可能性があり、これが投稿の投票数になります。

さて、これが私の結果の順序付け方法です。「post」テーブルにリストされている投稿を、投票、つまり「post_votes」テーブルからの出現回数で並べ替える必要があります。

ただし、覚えておくべきことの 1 つは、一部の投稿がまったく投票されない可能性があり、たとえば、2 番目のテーブルに 0 件が見つかることです。

このトピックに関するヘルプをいただければ幸いです。

4

2 に答える 2

1

joinCOUNTを使用した単一の SQL クエリを使用できます。

SELECT post.id, COUNT(post_votes.post_id) AS upvotes
FROM post, post_votes
WHERE post.id = post_votes.post_id
GROUP BY post.id
ORDER BY upvotes DESC

現時点では、このクエリの有効性をテストすることはできませんが、この線に沿ったものです。

于 2013-10-14T10:31:24.167 に答える
0

左結合を使用できます

 select *,count(post_id) voteCount  from post left join post_votes on
    post.id=post_votes.post_id group by post_id order by voteCount desc
于 2013-10-14T10:31:59.933 に答える