В настоящее время я разрабатываю веб-сайт для файлового хостинга. Я сортирую файлы по тегам, и у меня есть проблема для создания запроса на поиск в SQL. Если я ищу несколько тегов сразу, я хочу получить файлы, которые имеют все эти теги.SQL-запросы с краткими тегами
Ниже приведен пример того, что я хочу сделать. Если мой поиск «#code #python», мой запрос должен вернуть мне файлы с обоими тегами (файл с id 2 в этом примере). Если поиск просто «# код», запрос должен возвращать файлы 2 и 3.
Вот как я храню все данные, у меня есть таблица для файлов, одна для тегов и другая с ссылками между файлы и теги (files_tags).
Table Tags
------------------------
| id | name |
------------------------
| 1 | Code |
------------------------
| 2 | Python |
------------------------
| 3 | PHP |
------------------------
Table Files
------------------------
| id | name |
------------------------
| 1 | python.pdf | (#python)
------------------------
| 2 | main.py | (#code #python)
------------------------
| 3 | class.php | (#code #php)
------------------------
Table files_tags
------------------------
| id | tag | file |
------------------------
| 1 | 1 | 2 |
------------------------
| 2 | 1 | 3 |
------------------------
| 3 | 2 | 1 |
------------------------
| 4 | 2 | 2 |
------------------------
| 5 | 3 | 3 |
------------------------
Мой текущий запрос:
SELECT DISTINCT `files`.* FROM `files`, `files_tags`, `tags` WHERE `files`.`id` = `files_tags`.`file` AND `files_tags`.`tags` = `tags`.`id` AND `tags`.`name` LIKE %"#code #python"%;
Но это заставляет меня все 3 файла, а не просто подать 2.
Что я делаю неправильно?
Спасибо за помощь
Я думаю, вам нужно 'where 2 <= ...' получить все файлы, имеющие хотя бы те теги 2 – apokryfos