我现在大部分时间都在谷歌搜索,但我似乎无法找到正确的答案。也许是因为我真的不知道在哪个方向上看(加入?存在?)。我所拥有的是3张桌子:
有一个名为'groups'和'languages'的表格,其中包含实际的组和语言数据,但现在这并不重要。
用户应该能够生成包含所有成员的列表,具体取决于所选的组和/或语言。用户选择的组/语言保存在包含ID($aGroups
和$aLangs
)的两个单独数组中。
我想要/需要的是SELECT * FROM members WHERE ...
这就是我被卡住的地方。我尝试了加入,我尝试了IN()
,我尝试了EXIST
,但似乎没有任何效果。
非常感谢任何帮助!
答案 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.