Итак, у меня есть веб-приложение, которое позволяет пользователям отправлять код.Представления хранятся в таблице code
, и пара столбцов с полнотекстовым индексированием.Вот как я выполнял поиск до сих пор.
Но пользователи могут отправлять свои заявки с таким количеством тегов, как им нравится - и я бы хотел, чтобы они также были включены в поиск (но всев одном запросе ...).Теги хранятся в таблице tags
, и есть таблица пересечений под названием code_tags
, в которой хранятся code_id
и tag_id
.Стандартный материал.
Мой «старый» поисковый запрос был таким:
SELECT *
FROM code
WHERE MATCH (title, summary, code) AGAINST ('$searchterm')
$searchterm
был получен через PHP $ _POST.
Поэтому я попытался написать немногобольше «продвинутого» запроса:
SELECT code.*,
code_tags.*,
tags.*,
tags.tag
FROM code, code_tags, tags
WHERE code_tags.code_id = code.id
AND tags.id = code_tags.tag_id
AND MATCH (title, summary, code) AGAINST ('$searchterm')
Но все, что он сделал, это вернул ... Ничего .Даже когда был введен совершенно правильный поисковый термин.
Поэтому я закомментировал последнюю строку:
SELECT code.*, code_tags.*, tags.*, tags.tag
FROM code, code_tags, tags
WHERE code_tags.code_id = code.id
AND tags.id = code_tags.tag_id
-- AND MATCH (title, summary, code) AGAINST ('php')
. Это возвращает каждую отправку в базу данных.Но одна и та же строка повторяется столько раз, сколько для нее есть тегов (единственное отличие - тег в каждой возвращаемой строке).
EG:
Ошибка запроса http://i48.tinypic.com/2m5z80m.png
Итак, наконец , я подумал, что буду умным и GROUP_CONCAT теги:
SELECT code.*, code_tags.*, tags.*, GROUP_CONCAT(tags.tag SEPARATOR ' ') AS taggroup
FROM code, code_tags, tags
WHERE code_tags.code_id = code.id
AND tags.id = code_tags.tag_id
-- AND MATCH (title, summary, code, taggroup) AGAINST ('php')`
С этим связаны две довольно большие проблемы.
- С закомментированной последней строкой
AND MATCH
возвращается только одна строка (со всеми деталями первой записи вcode
таблица - и группа тегов перечисляет каждый тег для каждой отправки! - С учетом последней строки
AND MATCH
я получаю следующую ошибку: Unknown column 'taggroup' in 'where clause'
- черт!
Итак, что я должен делать?: S