Привет У меня есть следующие таблицы:Найти строки, которые удовлетворяют два условий и являются уникальными
Keyword
--------------------
| id | Value |
--------------------
| 1 | test1 |
| 2 | test2 |
|------------------|
URL
---------------------------
| id | URL |
---------------------------|
| 1 | www.something.com |
|--------------------------|
Keywords_URL
---------------------------
| Keywordid | URLid |
---------------------------
| 1 | 1 |
| 2 | 1 |
|-------------------------|
Так что идея состоит в том, что у меня есть много URL-адресов, связанных с ключевым словом, URL-адрес может иметь более 1 ключевые слова, и многие URL могут иметь одинаковые ключевые слова.
Таким образом, таблица URL-адресов описывает информацию об определенном URL-адресе, в таблице ключевых слов описывается информация о ключевых словах, а другая таблица Keywords_URL связывает две таблицы.
Я ищу запрос, который вернет все URL-адреса, имеющие в качестве условий два ключевых слова.
Например, я хотел бы знать, что URL-адреса имеют как «test1» , так и слова «test2». Таким образом, результатом должны быть все URL-адреса, у которых есть оба ключевых слова, связанных с ним.
Кроме того, я хочу, чтобы мои результаты были «Distinct», поэтому нет повторяющихся строк.
Я удивлен, что MySQL
не поддерживает статью INTERSECT
, и теперь я ищу способ решить эту проблему.
Вот что я сделал до сих пор:
(SELECT kewyord.Value, URL.id id, FROM Keywords_URL JOIN Keyword ON Keywords_URL.Keywordid = Keyword.id JOIN URL ON Keywords_URL.URLid = URL.id WHERE Keywords.Value = "test1")
UNION DISTINCT
(SELECT kewyord.Value, URL.id id, FROM Keywords_URL JOIN Keyword ON Keywords_URL.Keywordid = Keyword.id JOIN URL ON Keywords_URL.URLid = URL.id WHERE Keywords.Value = "test2")
ORDER BY id;
Проблема заключается в том, что я получаю дубликаты строк, но и я получаю URL, которые имеют один из двух ключевых слов (т.е. не все строки удовлетворяют что у них должны быть оба ключевых слова)
Любые идеи?
Эй, спасибо, позвольте мне запустить это, и я вернусь к вам. – John
Это потрясающе, и он отлично работает! Спасибо огромное ! The = 2 в конце запроса используется для определения того, что я ищу 2 ключевых слова или ограничит результаты только 2? – John
'WHERE k.value IN ('test1', 'test2')' * гарантирует *, что все возвращенные URL-адреса связаны либо с ''test1'','' test2'', либо с обоими. '= 2' отфильтровывает те, которые связаны с * только одним * из двух ключевых слов. –