我正在尝试在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%")
答案 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
时,请确保您将keyword
和keyword_equipment
表格保持最新状态!