SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 24.12.2009 14:40:56

UdarEC
Участник
Зарегистрирован: 24.12.2009
Сообщений: 2

Система тегов, как ее улучшить дальше?

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

Есть таблицы item, tags и item2tag, связывающая их (связь много ко многим)
item
id name about tag_id

tags
id tag

item2tag
item_id tag_id

В результате можно делать запрос всех элементов из таблицы, содержащих один из тегов и все устраивает, а вот как сделать запрос записей, содержащих 2 тега именно?

Ищу по одному тегу так, например:
SELECT s_item.id, s_item.field1,s_item.field3, s_item.town, s_item.phone, s_tags.name
FROM item s_item LEFT JOIN item2tag s_item2tag
ON s_item.id=s_item2tag.item_id LEFT JOIN tags s_tags ON s_item2tag.tag_id=s_tags.id
WHERE s_tags.name='фильм' ORDER by s_item.id ASC LIMIT 50

Отредактированно UdarEC (24.12.2009 19:34:59)

Неактивен

 

#2 24.12.2009 18:28:34

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Система тегов, как ее улучшить дальше?

Через самообъединение только.

SELECT
FROM item i, tags t1, tags t2, item2tag x1, item2tag x2
WHERE
  t1.name = 'фильм'
AND
  t2.name = 'ужасы'
AND x1.tag_id = t1.id AND i.id = x1.item_id
AND x2.tag_id = t2.id AND i.id = x2.item_id
ORDERLIMIT 50


Кстати, поле item.tag_id — лишнее, кажется.

Неактивен

 

#3 24.12.2009 19:31:03

UdarEC
Участник
Зарегистрирован: 24.12.2009
Сообщений: 2

Re: Система тегов, как ее улучшить дальше?

Большое спасибо, попробую сейчас. Ваш вариант будет без Join-ов вообще, он лучше кажется выходит по нагрузке и скорости работы?

Неактивен

 

#4 24.12.2009 19:34:08

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Система тегов, как ее улучшить дальше?

С JOINами, с внутренними. По нагрузке чуть лучше, чем внешние, т.к. не надо NULL
проверять.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson