Найти домены, используя один тег? - PullRequest
1 голос
/ 28 января 2011

У меня доменные имена с tags в таблице1

tags разделены запятыми.пример

domain        tags
facebook.com  facebook,social,networking,friends,community

Я хочу выполнить поиск доменов по одному тегу, скажем "social", так как мне это сделать?
Я использовал этот запрос для нескольких тегов, но он не работает для одного.

SELECT * FROM table1 WHERE MATCH (tags) AGAINST ('social')

Я включил ПОЛНЫЙ ПОИСК ТЕКСТА в таблице1

Как запросить по одному тегу и получить информацию о доменах, связанных с social

Ответы [ 3 ]

0 голосов
/ 28 января 2011

Как и предполагали другие, запрос LIKE, вероятно, даст вам то, что вы хотите, но имейте в виду, что все эти примеры будут соответствовать тегу social и любому тегу, в котором есть фраза "social".(например, если у вас есть тег типа social-networking или ice-cream-social, он будет соответствовать всем этим).

Вы действительно должны нормализовать эту структуру таблицы.Уберите свой столбец tags и представьте другую таблицу.Что-то вроде DomainTag.

DomainTag
-------------
DomainId
TagId

Домен, имеющий несколько тегов, приведет к нескольким строкам в DomainTag.Чтобы найти домен с данным тегом, вы выполняете запрос к DomainTag, либо присоединяясь к Domain, если DomainId отличается от domain, либо просто возвращая имя домена напрямую.

0 голосов
/ 28 января 2011

Примечание: Другие предложили LIKE, но он не оптимизирован для полнотекстовых запросов, поскольку будет сканировать всю таблицу.

Возможно, вы захотите взглянуть на руководство по MATCH .. ПРОТИВ и посмотреть, если вам что-то не хватает. например,

  • Если 50% ваших строк содержат тег social, то он вообще не будет в индексе (слишком часто)

Но реальная проблема, скорее всего, заключается в том, что вы должны указывать режим

SELECT * FROM dom2 WHERE MATCH (tags) AGAINST ('social' in boolean mode)
0 голосов
/ 28 января 2011

это должно вам помочь:

select * from table1 where tags like '%social%'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...