Я строю систему тегов.Я процитировал его, потому что это не совсем система тегов, но достаточно близко.
Очевидно, что при работе с тегами пользователь может очень хорошо использовать несколько тегов и ожидать, что результаты будут отфильтрованы еще глубже.
Проблема, с которой я сталкиваюсь, заключается в том, как именно это сделать.
Есть два способа сделать это, но я был бы очень признателен, если бы кто-то мог объяснить правильный путь.
способ 1) Выполните индивидуальный запрос для каждоготеги затем сортировать / объединять / играть с данными позже.путь 2)
SELECT i2t.item_id
FROM Item2Tag i2t
INNER JOIN Tag t
ON i2t.tag_id = t.tag_id
WHERE t.tag_text IN ('beach','cloud','waves')
GROUP BY i2t.item_id
Выше мой запрос.Это основано на модифицированной версии решения Toxi.Надеюсь, вы видите, что происходит ... по сути, есть 3 таблицы, 1 для информации, 1 для тегов и еще одна для их соединения.
Это то, чем я сейчас занимаюсь: я заменяю «пляж», «облако», «волны» переменной.Затем в коде PHP я преобразовываю массив в строку с каждым словом, разделенным запятыми, и просто вставляю его в запрос.что-то вроде:
foreach ($tagarray as $tag){
$string = .$tag1.", " }
Это, конечно, немного упрощенно, поскольку мне нужно правильно завершить последний тег без запятой ... но, надеюсь, вы поймете точку.
Итак, $ string становится равным 'tag1, tag2, tag3'
SELECT i2t.item_id
FROM Item2Tag i2t
INNER JOIN Tag t
ON i2t.tag_id = t.tag_id
WHERE t.tag_text IN ('$string')
GROUP BY i2t.item_id
Есть ли лучший способ сделать это?