Задавайте вопросы, мы ответим
Вы не зашли.
Попытаюсь объяснить подробнее:
Есть две таблицы - messages и tags. Таблица messages имеет такую структуру:
id title text
1 ... ...
2 ... ...
3 ... ...
4 ... ...
А tags такую:
id name message
1 боевик 1
2 комедия 1
3 драма 2
4 история 1
Нужно выбрать из таблицы messages записи по нескольким тегам, т.е. например по тегам 'боевик', 'комедия', 'история' должна выбраться запись с id 1. Причем в записи из таблицы messages не должны дублироваться, так-как эта выборка будет использоваться в поиске по сайту и соответственно от неё зависит пагинатор и т.п.
Уже второй день пытаюсь найти решение, пока безрезультатно. Надеюсь кто нибудь здесь сможет мне помочь, буду очень благодарен.
Отредактированно oleg_l (20.05.2010 21:39:26)
Неактивен
Неактивен
Немного не то, видимо я плохо описал задачу. Нужно вытащить только те записи, на которые ссылаются все указанные теги ('боевик', 'комедия', 'история'), а не один из них.
Неактивен
Неактивен
Рискну поспорить, что смысл не правильный получается, как исходных таблиц, так и соответственно любых запросов к ним. Я в мускуле не мастер, но со стороны Си сделал бы битовые маски... К примеру маски:
Боевик - 0001
Комедия - 0010
Драма - 0100
История - 1000
То есть элемент, относящийся и к боевикам, и к комедиям, и к историям будет иметь соответствующее битовое значение поля 1011. Далее нужно сложить вместе необходимые маски и сверить со всеми записями в таблице. Как это сделать в мускуле, думаю Вам подскажут в этом местные специалисты
И еще я абсолютно не уверен, что для мускула это рациональное решение. Но битовые операции по-идее выполняются очень быстро.
Неактивен
Можно и через битовые маски. На равенство они очень даже ничего
будут работать. Ну и если список не меняется и количество вариантов
не более 64. Тогда можно и SET использовать
Неактивен