2

私は一日のほとんどをグーグルで検索してきましたが、正しい答えが見つからないようです。たぶん、どちらの方向を見たらいいのかわからないからでしょう(参加?存在?)。私が持っているのは3つのテーブルです:

説明テーブルのセットアップ


実際のグループと言語のデータを含む「グループ」と「言語」という名前のテーブルがありますが、現時点では重要ではありません。

ユーザーは、選択したグループや言語に応じて、すべてのメンバーを含むリストを生成できる必要があります。$aGroupsユーザーが選択したグループ/言語は、ID (および)を含む 2 つの別個の配列に保存されます$aLangs

私が欲しい/必要としているのはSELECT * FROM members WHERE ...

そして、それが私が立ち往生したところです。私は結合を試みました、私は試しましたIN()、私は試しましEXISTたが、何も正しく動作していないようです.

どんな助けでも大歓迎です!

4

3 に答える 3

0

括弧が必要だと思います:

//assuming you have ids stored in $lang and $group
SELECT * FROM members WHERE (SELECT group_id FROM group_members WHERE member_id=members.id)='$group'
AND (SELECT lang_id FROM language_members WHERE member_id=members.id)='$lang' 

秘訣は「members.id」です。DB はすべてのメンバーに対してサブクエリを呼び出し、グループと言語の条件が満たされているかどうかを調べます。

于 2013-02-19T17:38:24.517 に答える
0

言語とグループでメンバーを選択する場合は、次のようにすることができます。

$query = "select * from members as m 
left join group_members as gm on gm.member_id = m.id 
left join language_members as lm on lm.member_id = m.id";
if(isset($aGroups)) {
  $query .= " where group_id in (".implode(",", $aGroups).")";
  if(isset($aLangs)) {
    $query .= " and language_id in (".implode(",", $aLangs).")";
  }
} 
elseif(isset($aLangs)) {
  $query .= " where language_id in (".implode(",", $aLangs).")";
}
于 2013-02-19T17:39:22.950 に答える
0
Select m.* FROM members m, group_members gm, language_members lm
WHERE
lm.member_id=m.id AND
m.id=gm.member_id AND
<<<< START YOUR OWN WHERE HERE.
于 2013-02-19T17:42:00.173 に答える