2014-11-29 2 views
-1

Я пытаюсь выполнить поиск в таблице mySQL для ключевых слов с длинным хвостом, отображающих самые близкие или точные совпадения сначала, а затем упорядочивая Fixture-Name.MySQL Поиск нескольких ключевых слов

Должен быть более интеллектуальный способ сделать это ... Все отзывы приветствуются!

SELECT * FROM `equipment` 
WHERE (`Fixture-Name` LIKE "%keyword2 keyword1%" || `Description` LIKE "%keyword2 keyword1%"||`Product-Line` LIKE "%keyword2 keyword1%" || `Fixture-Type` LIKE "%keyword2 keyword1%" || `Lamp-Watts` LIKE "%keyword2 keyword1%") 
UNION 

SELECT * FROM `equipment` 
WHERE (`Fixture-Name` LIKE "%keyword2%" || `Description` LIKE "%keyword2%" || `Product-Line` LIKE "%keyword2%" || `Fixture-Type` LIKE "%keyword2%" || `Lamp-Watts` LIKE "%keyword2%") 
UNION 

SELECT * FROM `equipment` 
WHERE (`Name` LIKE "%keyword1%" || `Description` LIKE "%keyword1%" || `Product-Line` LIKE "%keyword1%" || `Fixture-Type` LIKE "%keyword1%" || `Lamp-Watts` LIKE "%keyword1%") 
+0

FULLTEXT индекс? – Strawberry

+0

Если бы я был вами, я бы сделал цикл, если это с PHP или другим языком третьего уровня. – cybermonkey

+0

обе хорошие идеи! Благодаря! Я буду изучать каждую из них. – Cybervanes

ответ

0

Для такого применения, было бы лучше построить keyword таблицы и keyword_equipment, такие как:

CREATE TABLE keyword (
    id INT NOT NULL AUTO_INCREMENT, 
    word CHAR(127) NOT NULL, 
    PRIMARY KEY (id), 
    INDEX(word) 
) 

CREATE TABLE keyword_equipment (
    keyword_id INT NOT NULL, 
    equipment_id INT NOT NULL, 
    weight DOUBLE NOT NULL, 
    PRIMARY KEY (keyword_id, equipment_id), 
    FOREIGN KEY (keyword_id) REFERENCES keyword (id), 
    FOREIGN KEY (equipment_id) REFERENCES equipment (id), 
) 

Ваш запрос будет выглядеть так:

SELECT e.* 
FROM keyword AS k 
INNER JOIN keyword_equipment AS ke ON ke.keyword_id = k.id 
INNER JOIN equipment AS e ON e.id = ke.equipment_id 
WHERE k.word IN ('keyword1', 'keyword2') 
GROUP BY e.id 
ORDER BY SUM(ke.weight) DESC 

При вставке или обновлении equipment, убедитесь, что вы держите обе таблицы keyword и keyword_equipment актуальными!

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