логика mysql для результатов, охватывающих несколько строк - PullRequest
1 голос
/ 19 сентября 2011

У меня есть поисковый запрос продукта, который возвращает строки, подобные этой:

| id | name | search tag |
| 1  |  cat |  furry     |
| 1  |  cat |  ginger    |
| 2  |  dog |  furry     |

Мне нужно получить одну строку, которая соответствует более чем одному поисковому тегу - для этого примера поиск по пушистому AND имбирь не возвращает строк, поскольку в строке есть только один поисковый тег (это потому что для получения этих результатов я использую INNER JOIN).

Мой вопрос: что мне нужно сделать, чтобы иметь возможность проверить на furry AND ginger в запросе и вернуть кошку, но не собаку?

Я делаю это на PHP.


UPDATE

Чтобы справиться с тем, что пользователи вводят дубликаты тегов, простое исправление условия HAVING будет возвращать строки с дублирующимися тегами вместо их игнорирования:

mysql> select id, name, group_concat(tag) as tags, 
count(tag) as cnt from animals where tag in ('furry', 'ginger') 
group by id HAVING cnt>=2;

1 Ответ

4 голосов
/ 19 сентября 2011

Вы можете сначала выбрать строки с нужными тегами, а затем сгруппировать их по идентификатору животного.Подсчитайте, сколько результатов вы получите на одно животное, и если оно совпадает с количеством тегов, которые вы хотели получить, вы получили совпадение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...