MySQL搜索多个关键字
我试图在mySQL表中搜索长尾关键字,首先显示最接近的或精确的匹配项,然后按MySQL搜索多个关键字,mysql,Mysql,我试图在mySQL表中搜索长尾关键字,首先显示最接近的或精确的匹配项,然后按Fixture Name排序 必须有一种更聪明的方法来做这件事。。。任何和所有的反馈是感激的 SELECT * FROM `equipment` WHERE (`Fixture-Name` LIKE "%keyword2 keyword1%" || `Description` LIKE "%keyword2 keyword1%"||`Product-Line` LIKE "%keyword2 keyword1%" ||
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%")
对于此类应用程序,最好构建一个
关键字
表和关键字_设备
,例如:
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
插入或更新
设备
时,请确保关键字
和关键字_设备
表保持最新 如果我是你,我会做一个循环,如果这是与PHP或其他一些3级语言。这两个好主意!谢谢我将对每一个都做一些探索。