0

内部結合クエリの作成について助けが必要です。

2 つのテーブル、ブログ、フォロワーがあります。

ブログ テーブルにはすべてのブログ情報があり、フォロワーにはユーザー ID とユーザーがフォローしているブログ ID の 2 つのフィールドがあります。

フォロワー数でブログを並べ替えるクエリを作成したいと考えています。

これは、ユーザーがフォローしているビルドを示すために使用するものの例です (参照用)。

    $query = "SELECT * FROM blogs INNER JOIN followers ON (blogs.id = followers.blogid) WHERE followers.userid='" .$usernamesesh. "'";

すべてのブログを選択する同様のクエリを作成するにはどうすればよいですか。ただし、フォロワーの多い順に並べ替えます。

これが理にかなっているといいのですが、何らかの理由でこれについて頭を悩ませることはできません!

他の唯一のオプションは、ブログテーブルにフォロワー数フィールドを追加することですが、それにはフォロースクリプトなどの変更が必要になります.

クレイグ。

4

4 に答える 4

1

テーブルの正確な構造を知らなければ、それを伝えるのは困難です。フォロワーテーブルが次のようになっていると仮定します

   blogid | userid
   -------+----------
     1    |  2
   -------+----------
     1    |  1
   -------+----------
     1    |  3
   -------+----------
     2    |  2
   -------+---------

 SELECT blogid, COUNT(userid) AS UserCount FROM followers 
 GROUP BY blogid ORDER BY UserCount DESC;

次に、blogs テーブルに参加して、そのテーブルから必要な列を取得できます。

SELECT blogs.*, IFNULL(f.UserCount,0) AS UserCount
FROM blogs 
 LEFT JOIN (
    SELECT blogid, COUNT(userid) AS UserCount FROM followers 
    GROUP BY blogid
 ) f
 ON f.blogid = blogs.id
 ORDER BY UserCount DESC
于 2013-10-31T15:32:41.913 に答える
0

Mihai の提案を少し調整することをお勧めします。そのため、次の文字列をクエリの最後に追加します。GROUP BY blogs.id ORDER BY COUNT(userid) DESC

于 2013-10-31T15:34:43.290 に答える
0
$query = "SELECT blogs.id, count(*) AS total FROM blogs INNER JOIN followers ON (blogs.id = followers.blogid) WHERE followers.userid='" .$usernamesesh. "'" GROUP BY blogs.id ORDER BY total;

お役に立てれば

于 2013-10-31T15:35:33.073 に答える