PHP MySQL - 使用来自不同表的where子句语句选择成员

时间:2013-02-19 17:13:26

标签: php mysql sql select

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

Explanation table set-up


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

用户应该能够生成包含所有成员的列表,具体取决于所选的组和/或语言。用户选择的组/语言保存在包含ID($aGroups$aLangs)的两个单独数组中。

我想要/需要的是SELECT * FROM members WHERE ...

这就是我被卡住的地方。我尝试了加入,我尝试了IN(),我尝试了EXIST,但似乎没有任何效果。

非常感谢任何帮助!

3 个答案:

答案 0 :(得分: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的条件。

答案 1 :(得分: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).")";
}

答案 2 :(得分: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.