Запрос:
SELECT
id_data,
id_tag IN (75) AS tag1,
id_tag IN (12) AS tag2,
SUM(id_tag IN (75, 12)) summedTags
FROM
tags_inservice
WHERE id_service = 1
GROUP BY id_data
ORDER BY summedTags DESC
Результат:
id_data tag1 tag2 summedTags
------- ------ ------ ----------
3109 0 1 2
1956 0 0 2
1928 0 0 1
2738 1 0 1
Что я считаю неправильным:
summedTags
редко соответствует фактической сумме тегов!В примере id_data
3109 имеет 0 + 1 = 2, что неверно, а id_data
1956 показывает 0 + 0 = 2, что тоже неправильно, и т. Д., И т. Д. Что я делаю неправильно?
Кстати, я также попытался добавить HAVING SUM(id_tag IN (75, 12)) = 2
с похожими результатами.
Еще немного дополнительной информации, если вам это нужно:
У меня есть таблица tags_inservice, которая содержит кучуданных (представленных id_data, идентификатором из другой таблицы), и данные могут быть помечены различными тегами.Id_data может иметь ноль или более id_tags, поэтому может быть несколько строк с одинаковым значением id_data.На самом деле, иногда допустимо, чтобы одни и те же id_data отмечались одним и тем же id_tag более одного раза.
DESCRIBE tags_inservice;
Field Type Null Key Default Extra
---------- ------- ------ ------ ------- --------------
id_intag int(11) NO PRI (NULL) auto_increment
id_tag int(11) YES MUL (NULL)
id_service int(11) YES MUL (NULL)
data_type int(11) YES (NULL)
id_data int(11) YES MUL (NULL)