1

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

x_community_invites :

id  community_id    from    to  registered  message seen    accepted    updated

x_communities :

id  name    tags    registered  updated

クエリを使用:

$query = sprintf("SELECT x_commmunities.* FROM x_commmunities, x_community_invites WHERE x_community_invites.to = '%s' AND x_community_invites.accepted = '%d'", $id, 1);

私の問題は、実行したクエリが x_communities テーブルからすべてのフィールドを返すことです。

シナリオ例:

x_communities テーブルには 2 つのコミュニティがあります。

  • ID - 1 および 2 の名前
  • 1stコミュニティと2ndコミュニティ

x_community_invites テーブルには 3 つのコミュニティへの招待があります。

  • すべての異なる ID
  • 1 番目のコミュニティと同じコミュニティ ID を持つ 2、両方とも受け入れられるフィールドへ
  • 2 番目のコミュニティと同じコミュニティ ID を持つ 1、to = プロファイル ID、承認済み = 1

しかし、クエリを使用すると、何らかの理由でコミュニティの ID と名前がすべて取得されます。

x_communities_invites.to フィールドがユーザー ID で、x_communities_invites.accepted フィールドが 1 であるコミュニティ ID と名前を返したいと考えています。

また、上記のクエリはどのようなクエリですか? ある種の結合、同様の構文を持つ同様のクエリをオンラインで見つけることができません。

ここで私を助けてもらえますか?

ここで何が間違っていますか?

4

3 に答える 3

2

暗黙の内部結合ですが、2 つのテーブルを接続する条件が欠落しています。

SELECT x_commmunities.id, x_commmunities.name, COUNT(x_community_invites.*) AS invites
  FROM x_commmunities, x_community_invites 
 WHERE x_commmunities.id = x_community_invites.community_id
   AND x_community_invites.to = 'some_id_value' 
   AND x_community_invites.accepted = '1'
 GROUP BY x_commmunities.id, x_commmunities.name

これにより、重複 (同じコミュニティへの複数の招待) が発生する可能性があります。GROUP BY は、提供されたフィールドによってレコードを集約します。

于 2013-11-05T12:01:18.483 に答える
2

テーブルがリンクされていません。JOIN を使用する必要があります。

SELECT x_commmunities.* 
FROM x_commmunities
JOIN x_community_invites  on x_commmunities.id=x_community_invites.community_id
WHERE x_community_invites.to = '%s' AND x_community_invites.accepted = '%d'
于 2013-11-05T11:57:20.140 に答える