MySQL的专家 - 与“相交”需要帮助
题
我知道,MySQL的5.x的不支持交叉,但是,这似乎是我所需要的。
表A:产品(P_ID)
表B:Prod_cats(CAT_ID) - 类别信息(名称,说明,等)
表C:prod_2cats(P_ID,CAT_ID) - 多对多
prod_2cats保持许多(1或多个)已被分配给产品(A)的类别。
否则查询/过滤器查找,(用户交互)和需要能够跨越多个类别选择产品满足所有的条件。
例: - 分配给X类80多个产品 - 分配给Y类50个产品 - 但只有10个产品(相交)被分配给BOTH猫X AND猫ý
此SQL适用于一个类别:
SELECT * FROM产品WHERE p_show = 'Y' 和P_ID IN(SELECT P_ID FROM prods_2cats
AS PC WHERE PC.cat_id = “$ CAT_ID。”
< - $ CAT_ID被消毒VAR从查询形式传递
我似乎无法找到的手段说“给我的猫和猫B的交叉”并取回该子集(10条记录,从我的例子)
帮助!
解决方案
这组理论应用交叉点的定义。因此,如果X相交ý给出组Z,则对于在Z各自X它认为x在X和X是Y中。
类似
SELECT * FROM products WHERE p_show='Y' AND p_id IN
( SELECT p_id FROM prods_2cats AS PC WHERE PC.cat_id =X) AND p_id IN
( SELECT p_id FROM prods_2cats AS PC WHERE PC.cat_id =Y)
其他提示
嗯,我不知道它是做的最好的方式,但它可以在你的已经存在的查询很方便地添加:
SELECT *
FROM products
WHERE p_show='Y'
AND p_id IN (SELECT p_id
FROM prods_2cats AS PC
WHERE PC.cat_id = $cat1_id)
AND p_id IN (SELECT p_id
FROM prods_2cats AS PC2
WHERE PC2.cat_id = $cat2_id)
SELECT *
FROM products
WHERE p_show='Y'
AND p_id IN (SELECT p_id
FROM prods_2cats AS PC
WHERE PC.cat_id in ($cat1_id, $cat2_id ))
或甚至更好
SELECT p.*
FROM products p INNER JOIN prods_2cats AS PC on p.p_id = PC.p_id
WHERE p_show='Y' and C.cat_id in ($cat1_id, $cat2_id )
希望这有助于
不隶属于 StackOverflow