如何在mysql中搜索多个类别

时间:2012-10-18 02:12:08

标签: mysql sql search

视频

v_id, 
v_name

属性:

p_id,
p_name

property_video:

pv_id,
pv_v_id, <- video id
pv_p_id, <- property id

我想搜索muti-cat,例如:

鉴于一些p_id(属性ID),我想搜索匹配那些id视频

需要property_video中的所有p_id和相同的pv_v_id

然后mysql写道:

SELECT
  a.*, 
  b.* 
FROM 
  video as a, 
  property_video as b 
WHERE
  a.v_id = b.pv_v_id 
  and b.pv_p_id in(12,15) 
GROUP BY a.v_id;

我知道这部分in(12,15)必须改为“和”,但我不知道如何让它发挥作用。

3 个答案:

答案 0 :(得分:1)

在这里,我们将在指示视频ID的列上加入property_video和video。 where条件允许我们仅将结果限制为具有IN子句中包含的属性的视频。

SELECT v.v_id
FROM property_video pv
    JOIN video v
    ON pv.pv_v_id = v.v_id
WHERE pv.pv_p_id IN (12,15)
GROUP BY v.v_id
HAVING count(distinct pv.pv_p_id) = 2

通过视频ID进行分组,然后仅保留具有2个不同属性的视频(即必须同时拥有两个,而不仅仅是一个),即可实现多类别要求。这假设您构建查询语法的方法使您能够调整HAVING子句中的数字以匹配预期过滤器中不同属性的数量。

答案 1 :(得分:0)

我认为你需要使用innerJoin,试试这个。

SELECT
  a.*, 
  b.* 
FROM 
  video as a, 
InnerJoin property_video as b
WHERE a.v_id = b.pv_p_id
and b.pv_p_id in(12,15) 
GROUP BY a.v_id;

答案 2 :(得分:0)

select a.*, b.*, c.* from video as a, property_video as b, property as c 
where a.v_id = b.pv_v_id and c.p_id = b.pv_p_id and c.p_id in (12,15);

假设您正在寻找带有属性ID 12 15的视频