SQL语法挑战

时间:2011-01-09 07:14:52

标签: join checkbox sql

我有两个表,一个包含用户可以选择的不同选项的列表。例如:

tbl_options
id_option
选项

我用下一个表来存储用户选择的这些选项中的哪一个。例如:

tbl_selected
id_selected
id_option
id_user

我使用PHP循环遍历tbl_options表以生成用户可以从中选择的完整复选框列表。当用户选择选项时,id_option和id_user存储在tbl_selected表中。当用户取消选择一个选项时,将从tbl_selected表中删除id_selected记录。

我遇到的挑战是检索tbl_options中完整选项列表的最佳方法,并且查询指示存储在tbl_selected表中的相关记录。

我已经尝试了向tbl_selected LEFT JOIN'ing tbl_options,它为我提供了完整的选项列表,但是只要我添加WHERE id_user = ###,查询就会返回值为tbl_selected的记录。理想情况下,我希望查看查询结果如下:

id_option选项id_user
1个苹果3
2个橙子3
3个香蕉
4个梨
5个桃子3

这表明用户#3已经存储了苹果,橘子和桃子。这也表明用户#3没有选择香蕉或梨。

这可能是使用SQL语句还是我应该采用不同的技术?

1 个答案:

答案 0 :(得分:4)

您的问题是用户限制应用于整个查询。要仅将其应用于Join条件,您需要将其添加到ON子句中,如下所示:

select o.id_option, o.[option], s.id_user
from tbl_options o
    left outer join tbl_selected s
        on o.id_option = s.id_option and s.id_user = 3