используя как на другой столбец - PullRequest
2 голосов
/ 11 января 2012

В таблице tags у меня есть поле id. В таблице tastings у меня есть поле tags, которое представляет собой список номеров идентификаторов, разделенных запятыми, например 2,4,5. База данных MySQL.

Теперь я пытаюсь подсчитать, сколько раз каждый тег используется в общей сложности. Но я застрял с как часть. Я пробовал следующее, все с синтаксической ошибкой:

SELECT tags.id, tag, FROM tags, tastings WHERE tags LIKE tags.id + '%'

SELECT tags.id, tag, FROM tags, tastings WHERE tags LIKE tags.id & '%'

SELECT tags.id, tag, FROM tags, tastings WHERE tags LIKE CONCAT(tags.id, '%')

Что я делаю не так?

Ответы [ 3 ]

7 голосов
/ 11 января 2012

Я помогаю, если вы публикуете ошибку, но у вас есть лишняя запятая после списка выбора.Кроме того, вам может потребоваться указать tags, поскольку это и таблица, и столбец.

Попробуйте:

SELECT tags.id, tag
FROM tags, tastings
WHERE tastings.tags LIKE CONCAT('%', tags.id, '%')

или лучше, используйте новый синтаксис объединения:

SELECT tags.id, tag
FROM tags
JOIN tastings on tastings.tags LIKE CONCAT('%', tags.id, '%')

Обратите внимание на размещение тега.id в %, чтобы вы могли найти его идентификатор где-либо в нем.

Предупреждение: это объединение будет работать с идентификатором 4, если теги 13,14,15 (есть 4 в 14), поэтому, если все ваши идентификаторы меньше 10, вам придется переосмыслить критерии присоединения.

1 голос
/ 11 января 2012

Попробуйте следующий запрос.

select t.id , count(t.id) from tag t , tastings tas where tas.tags like '%' ||t.id||'%'
group by t.id;
1 голос
/ 11 января 2012

Вы не указали свою СУБД, поэтому я предполагаю, что поддерживается.

Как насчет

SELECT tags.id, tastings.tag
FROM tags 
    INNER JOIN tastings  
        ON tastings.tags like '%' + tags.id + '%'

Это должно работать (опять же, в зависимости от вашей СУБД), но вы должны действительно нормализовать свои данные, такого рода вещи действительно не будут масштабироваться / работать хорошо.

...