2

我现在大部分时间都在谷歌搜索,但我似乎找不到正确的答案。也许是因为我真的不知道往哪个方向看(加入?存在?)。我有3张桌子:

说明表设置


有一个名为“组”和“语言”的表,其中包含实际的组和语言数据,但现在这并不重要。

用户应该能够根据所选组和/或语言生成包含所有成员的列表。用户选择的组/语言保存在两个包含 ID ($aGroups$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 将为每个成员调用子查询,以确定是否满足 group 和 lang 的条件。

于 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 回答