我需要根据未加入查询的表中是否存在值来过滤查询结果。
我有一个登录表单,允许用户查看仅对他们可见的产品。我的数据模型是一个prod_user表,它将产品映射到用户:
id product user
1 1 1
2 1 3
3 1 5
4 2 1
5 2 2
6 3 2
每种产品还有其他与之相关的产品。我的prod_assoc表读作:
id product assoc
1 5 1
2 5 2
3 5 3
4 6 1
5 6 2
我还有一个产品表,其中包含产品信息。
可以直接查询用户可以看到的产品,然后遍历结果并查询每个产品的相关产品,但是 - 如何过滤相关产品以仅返回分配给该用户的相关产品?
我使用的完整查询很长,但基本上我为像
这样的用户抓取产品 SELECT p.*, pu.user FROM products p LEFT JOIN prod_user pu ON pu.product=p.id WHERE user = [user variable];
基本上我为每个产品构建了一系列相关产品,比如
SELECT p.fieldsIWant, pa.otherFields FROM prod_assoc pa LEFT JOIN products p ON p.id = pa.assoc WHERE pa.product = [that product variable as I iterate]
(这会根据需要向前端发送所有产品关联。)
问题是,该用户没有过滤相关产品。例如,我想知道用户1可以看到的产品5的所有相关产品。我得到了所有相关产品(1,2和3),但实际上用户1应该只看到产品1和2.我需要根据prod_user表中的数据过滤相关产品。我该怎么做呢?我尝试以各种方式加入它,但都没有奏效。有没有办法说,给我产品5的每个关联,但只根据prod_user表给这个用户可见的那些?
编辑:这里的答案是确实加入表格,然后只使用其他AND语句进行过滤。
答案 0 :(得分:1)
对您的示例使用以下查询:
(用户1可以看到的产品5的所有相关产品。我获得所有相关产品(1,2和3)但实际上用户1应该只看到产品1和2)
SELECT pu.user, pu.product, pa.product FROM prod_user pu, prod_assoc pa
WHERE pa.assoc = pu.product AND pa.product = 5 AND pu.user = 1;
在5和1中使用您的变量。