他の 2 つのテーブル間に多対多の関係を作成するジャンクション テーブルがあります。これが図です。
これが私の基本SQLクエリです。
SELECT `tag_to_url`.url_id, `websites`.url, `tags`.tag_name
FROM `tag_to_url`
INNER JOIN (`websites`,`tags`) ON `websites`.url_id = `tag_to_url`.url_id
AND `tag_to_url`.tag_id = `tags`.tag_id
ORDER BY `tag_to_url`.url_id
その結果の一例です。
+--------------------+-------------+
| url | tag_name |
+--------------------+-------------+
| google.com | search |
| google.com | e-mail |
| stackexchange.com | q&a |
| stackexchange.com | programming |
| stackexchange.com | database |
+--------------------+-------------+
これらの結果は基本的に私が探しているものですが、正しく機能しない URL をグループ化しようとしました。WHERE
句を 1 つ含めると、クエリも適切に機能します。
...
...
WHERE `tags`.tag_name = 'database'
+--------------------+-------------+
| url | tag_name |
+--------------------+-------------+
| stackexchange.com | database |
+--------------------+-------------+
しかし、条件にAND
演算子を追加するとWHERE
、これが期待されます。
WHERE `tags`.tag_name = 'database' AND `tags`.tag_name = 'q&a'
+--------------------+-------------+
| url | tag_name |
+--------------------+-------------+
| stackexchange.com | database |
| stackexchange.com | q&a |
+--------------------+-------------+
しかし、私は得る:
MySQL returned an empty result set (i.e. zero rows). (Query took 0.0027 sec)
で条件を追加しようとしましON
たJOIN
が、結果は同じでした。私は何を間違っていますか?
編集 :
このクエリの目的は、関連付けられた URL のリストとともに 1 つ以上のタグを取得することです。AND
これらの特定のタグのみを取得するには、複数の演算子を使用できる必要があります。質問 (URL) と複数のタグが添付されたスタック オーバーフローのように機能する必要があります。