質問

私には2つのテーブルがあります: groupsgroup_members.

groups テーブルには、ID、タイトル、説明など、各グループのすべての情報が含まれています。

の中に group_members テーブル、このような各グループの一部であるすべてのメンバーをリストします。

group_id | user_id
1 | 100
2 | 23
2 | 100
9 | 601

基本的に、私はページに3つのグループをリストしたいと思っていますが、4人以上のメンバーを持つグループのみをリストしたいと思います。内側 <?php while ?> ループ、私はそのグループの一部である4人のメンバーが欲しいです。グループをリストし、メンバーを別の内部ループにリストするのに問題はありません。グループを洗練することはできないため、メンバーが4人以上のメンバーのみが表示されます。

誰かがこれを行う方法を知っていますか? MySQLが参加していると確信しています。

役に立ちましたか?

解決

mysqlの使用 持っている このタスクの声明。

あなたのクエリは次のようになります:

SELECT g.group_id, COUNT(m.member_id) AS members
FROM groups AS g
LEFT JOIN group_members AS m USING(group_id)
GROUP BY g.group_id
HAVING members > 4

例参照が異なる名前の場合

SELECT g.id, COUNT(m.member_id) AS members
FROM groups AS g
LEFT JOIN group_members AS m ON g.id = m.group_id
GROUP BY g.id
HAVING members > 4

また、サイトのパフォーマンスに影響を与える可能性があるため、結合で使用しているキーのデータベーススキーマ内にインデックスを設定するようにしてください。

他のヒント

SELECT DISTINCT groups.id, 
       (SELECT COUNT(*) FROM group_members
        WHERE member_id = groups.id) AS memberCount
FROM groups

あなたの groups_main テーブルには、名前のキー列があります id. 。私はあなたが使用することができると信じています USING 結合の構文の場合 groups_fans テーブルには同じ名前のキー列がありますが、おそらくそうではありません。代わりに、これを試してみてください:

LEFT JOIN groups_fans AS m ON m.group_id = g.id

または交換します group_id どんなものでも、適切な列名があります groups_fans テーブル。

たぶん私はここでマークを外しており、OPを理解していませんが、なぜあなたはテーブルに参加しているのですか?

メンバーがいるテーブルがあり、このテーブルに「Group_Id」という名前の列がある場合、メンバーテーブルでクエリを実行して、Group_IDによってグループ化されたメンバーのカウントを取得できます。

SELECT group_id, COUNT(*) as membercount 
FROM members 
GROUP BY group_id 
HAVING membercount > 4

これは、あなたが参加を避けているが、それでもあなたが望むものをあなたに与えるべきであるという理由だけで、最もオーバーヘッドを持つはずです。

グループの詳細や説明などが必要な場合は、メンバーテーブルからグループテーブルに戻って結合を追加して、名前を取得すると最速の結果が得られます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top