Помогите мне понять этот код MySQL - PullRequest
0 голосов
/ 14 ноября 2009
$query = "SELECT posts.*
    FROM map, posts, tags
    WHERE map.tag_id = tags.id
    AND (tags.name IN ('mysql', 'database'))
    AND map.post_id = posts.id
    GROUP BY posts.id
    HAVING COUNT( posts.id ) = 2";

Я не понимаю последний ряд. Может кто-нибудь объяснить, пожалуйста, для меня? Какая разница, если у меня его там нет?

Ответы [ 3 ]

5 голосов
/ 14 ноября 2009

В последнем ряду говорится, что вы оставляете только те группы, которые имеют ровно 2 идентификатора записи. Если вы удалите его, будут выбраны все группы.

0 голосов
/ 14 ноября 2009

Из документов:

Предложение HAVING применяется почти последним, непосредственно перед отправкой элементов клиенту, без оптимизации. (LIMIT применяется после HAVING.)

Таким образом, применяется условие where, затем группируется, затем имеет .. Имея, может применяться к значениям, рассчитанным после того, как ваша группа свернула все ваши агрегаты, например SUM или MAX.

http://dev.mysql.com/doc/refman/5.1/en/select.html

0 голосов
/ 14 ноября 2009

Предикат "HAVING" действует как фильтр, который выбирает только строки с двумя (2) одинаковыми post.id.

Похоже, что запрос ищет строки с дублирующимися идентификаторами.

HAVING COUNT( posts.id ) > 1

, вероятно, будет лучше для этой цели.

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