2012-05-09 10 views
1

表要:taxonomy_term_dataMySQLのクエリのヘルプ -

tid name 
7  desert 
10 indian 

表:taxonomy_index

nid tid 
13  7 
10  7 
10  10 
12  7 
14  10 

は、私が "砂漠" とも "インディアン" を持っているNIDを取得するために、MySQLのクエリを必要としています。 ここで出力はnid = 10です。 誰かが質問を書くのに役立つことがあります。あなたはGROUP BYを経由して、この答えを得ることができsqlfiddle

答えて

2
SELECT nid 
FROM taxonomy_index 
JOIN taxonomy_term_data USING (tid) 
WHERE name IN ('desert', 'indian') 
GROUP BY nid 
HAVING COUNT(DISTINCT tid) = 2 

がオンラインで作業それを参照してくださいだけで初心者だ

SELECT ta.nid 
FROM taxonomy_index AS ta 
    JOIN taxonomy_index AS tb 
    ON tb.nid = ta.nid 
WHERE ta.tid = 7 
    AND tb.tid = 10 
+0

.... NID SELECT:次のようにtaxonomy_index FROM は....> COUNT(*)を有するNID BY( '砂漠'、 'インド') 群(TID) 名を使用して、おかげで私は@マークByersの – Parthi04

+0

感謝をtaxonomy_term_dataを登録しよう。私の検索基準は、 "Desert&indian"という名前を使用します。これら2つのテーブルを結合すると、この作品結果 – Parthi04

1

とHAVING:

SELECT nid 
FROM taxonomy_index 
WHERE tid IN (7, 10) 
GROUP BY nid 
HAVING COUNT(*) > 1 
+0

この作品を持って1つの – Parthi04

+0

を得る。.. taxonomy_index FROM NID を選択する方法(TID)を使用してtaxonomy_term_dataを登録しようNID BY( '砂漠'、 'インド') 、グループ内の名前は、COUNT(*)を有する > 1 – Parthi04

0

(nid, tid)組み合わせがユニークであると仮定すると:私は

1

さまざまなSQL文章で書くことができますこの作品

1.

SELECT DISTINCT(i.nid) 
FROM taxonomy_index i 
INNER JOIN taxonomy_term_data d 
ON i.tid = d.tid 
AND (d.name = 'desert' 
OR d.name = 'indian') 

2.

SELECT i.nid 
FROM taxonomy_index i 
INNER JOIN taxonomy_term_data d 
ON i.tid = d.tid 
AND (d.name = 'desert' 
OR d.name = 'indian') 
GROUP BY nid 

3.

SELECT i.nid 
FROM taxonomy_index i, taxonomy_term_data d 
WHERE i.tid = d.tid 
AND d.name IN ('desert', 'indian') 
GROUP BY nid 

4.

SELECT DISTINCT(nid) 
FROM taxonomy_index 
WHERE (tid = 7 
OR tid = 12) 
+0

http://stackoverflow.com/q/10511532/1257426 – Parthi04