4

ビデオ:

v_id, 
v_name

財産:

p_id,
p_name

プロパティ_ビデオ:

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

マルチキャットを検索したい例:

いくつかの 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)を「and」に変更する必要があることはわかっていますが、それを機能させる方法がわかりません。

4

3 に答える 3

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 つの異なるプロパティ (つまり、1 つだけではなく両方が必要) を持つ動画のみを保持することで、複数カテゴリの要件を達成できます。これは、クエリの構文を作成する方法によって、目的のフィルターの個別のプロパティの数に一致するように HAVING 句の数を調整できることを前提としています。

于 2012-10-18T03:32:33.447 に答える
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;
于 2012-10-18T02:20:44.590 に答える
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の動画を探しているとします。

于 2012-10-18T02:21:41.487 に答える