PHP MySQL показывает связанные элементы с помощью тегов

Я хочу показать похожие элементы, используя теги.

У меня есть таблица элементов со столбцами itemid, itemname и itemtagids. itemtagids имеет идентификаторы тегов CSV.

Скажем, в itemid 1 у меня есть 3 идентификатора тега 1,2,3, а в itemid 2 у меня есть 4 идентификатора тега 3,4,5,6 в itemid 3 у меня есть 2 идентификатора тега 2,3 и так далее..

Я хочу, чтобы для itemid 1 в похожих элементах сначала отображался 3-й itemid (потому что у него есть 2 совпадения), затем itemid 2 и так далее..

То, что я использовал, это:

SELECT itemid 
FROM items 
WHERE MATCH (itemtagids ) AGAINST ('2823' IN BOOLEAN MODE)

он возвращает результаты только в том случае, когда в столбце itemtags ids есть один itemtagid.

последовательность - это ложь: 234,546,2823,342,5643 Итак, здесь 2823 - это не отдельное слово, а целая строка из 234,54...43

что делать в этом случае, когда теги в виде идентификаторов и в формате CSV.


person kb0000    schedule 26.06.2011    source источник
comment
Используете ли вы отношения Many-2-Many?   -  person RobertPitt    schedule 26.06.2011


Ответы (1)


Кажется, что FULLTEXT не подходит для вашего случая. Вместо этого попробуйте использовать регулярные выражения.

SELECT `itemid`
FROM `items`
WHERE `itemtagids` REGEXP '^2823$' 
OE `itemtagids` REGEXP '^2823,'
OR `itemtagids` REGEXP ',2823$'
OR `itemtagids` REGEXP ',2823,';

РЕДАКТИРОВАТЬ: или, возможно, вы могли бы использовать одно регулярное выражение, например:

SELECT `itemid`
FROM `items`
WHERE `itemtagids` REGEXP '[[:<:]]2823[[:>:]]';

Надеюсь, поможет!

person Abhay    schedule 26.06.2011