2013-05-16 2 views
0

Я строю поисковую систему, которая поддерживает тег filter.below являются структура моей базы данных, которая многие ко многим таблицеКак заказать тег фильтрации результатов поиска

product_table 
id name 
1  p1 
2  p2 
3  p3 

tagged_table 
id pid tid 
1 1  1 
2 1  2 
3 1  3 
4 1  4 
5 1  5 
6 2  1 
7 2  2 
8 3  1 
9 3  2 
10 3  4 

tag_table 
id tag_name 
1 t1 
2 t2 
3 t3 
4 t4 
5 t5 
  • tagged_table.pid имеют в виду идентификатор product_table

  • tagged_table.tid имеют в виду идентификатор tag_table

Как построить самый быстрый sql-запрос, если я хочу, чтобы результат возвращался, если найдено какое-либо совпадение, и закажите результат по числу большинства случаев, которые соответствуют?

+0

«Самый быстрый» является странным требованием, когда у вас его нет. Попробуйте самостоятельно решить проблему и вернуться к чему-то более конкретному, например, к запросу, которое * работает * – zerkms

+0

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

+0

, поэтому предоставьте запрос, который не соответствует вашим требованиям к производительности , его 'EXPLAIN' и' SHOW CREATE TABLE' для каждой таблицы, используемой в запросе – zerkms

ответ

0

Благодаря zerkms я изменил мою таблицу на таблицу «многие-многие отношения» (см. Вопрос) И использовал простой запрос для решения моего вопроса.

SELECT COUNT(pid) AS matches FROM tagged_table WHERE tid IN (1,2,3,4) ORDER BY matches DESC 
+1

«совпадения» должны быть заключены в backticks 'не в кавычки (если вы хотите его закрыть или просто опустить anithyng) – zerkms

+0

отмечено, отредактировано. –

Смежные вопросы