MySQL搜索多个关键字

时间:2014-11-29 15:02:37

标签: mysql

我正在尝试在mySQL表中搜索首先显示最接近或完全匹配的长尾关键字,然后按Fixture-Name排序。

必须有一种更聪明的方式来做到这一点......感谢所有反馈!

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%")

1 个答案:

答案 0 :(得分: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时,请确保您将keywordkeyword_equipment表格保持最新状态!