1

表 : taxonomy_term_data

tid   name
7     desert
10    indian

表 : taxonomy_index

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

「砂漠」と「インディアン」を持つ nid を取得するには、mysql クエリが必要です。ここで、出力は nid = 10 です。誰かがクエリの作成を手伝ってくれませんか。私はただの初心者です

4

4 に答える 4

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

オンラインで動作することを確認してください: sqlfiddle

于 2012-05-09T05:38:09.367 に答える
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)
于 2012-05-09T07:22:08.357 に答える
1

この回答は、GROUP BY と HAVING を介して取得できます。

SELECT nid
FROM taxonomy_index
WHERE tid IN (7, 10)
GROUP BY nid
HAVING COUNT(*) > 1
于 2012-05-09T05:39:19.750 に答える
0

(nid, tid)組み合わせが一意であると仮定すると、次のようになります。

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
于 2012-05-09T07:03:10.587 に答える