我想根据用户权重进行搜索,例如...
我有以下搜索参数...
Location
Age
Gender
Sexual-Orientation
Marital-status
和其他一些...
要求为每个参数添加权重,例如如果用户将权重设置为...
location weightage 为 10
性别到 5
年龄到 3
则搜索结果应该与位置更相关,而不是与性别相关,甚至更不与年龄相关。
我不知道该怎么做!!!请告诉我这怎么可能使用mysql。
您可以在 mysql 中轻松完成此操作,因为它将布尔值视为数字:false 为 0,true 为 1。生成的查询可能类似于
SELECT name from customers
ORDER BY (location = 'Fort Worth, TX')*10 + (age > 21)*3 DESC
LIMIT 0,20;
这将为每个客户创建一个“分数”。沃思堡 21 岁以上的人获得 13 分,沃思堡的年轻人获得 10 分,其他地方 21 岁以上的人获得 3 分,其他人获得 0 分。我们按此分数降序排列,以便首先显示最佳匹配。
据我所知,您不能真正做到这一点,但是您可以根据一个或多个属性对结果进行排序,其中第一个属性是具有最高优先级的属性,最后一个属性是最不重要的,例如:
ORDER BY Location, Gender, Age
大多数面向搜索引擎的网站都使用FULL-TEXT-SEARCH
. select
与...相比,它会更快LIKE
...我添加了一个示例和一些链接...我认为这对您很有用...在此全文搜索中也有一些条件...
步骤1
CREATE TABLE articles (
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
title VARCHAR(200),
body TEXT,
FULLTEXT (title,body)
);
第2步
INSERT INTO articles (title,body) VALUES
('MySQL Tutorial','DBMS stands for DataBase ...'),
('How To Use MySQL Well','After you went through a ...'),
('Optimizing MySQL','In this tutorial we will show ...'),
('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
('MySQL vs. YourSQL','In the following database comparison ...'),
('MySQL Security','When configured properly, MySQL ...');
STEP:3
自然语言全文搜索:
SELECT * FROM articles
WHERE MATCH (title,body) AGAINST ('database');
布尔全文搜索
SELECT * FROM articles WHERE MATCH (title,body)
AGAINST ('+MySQL -YourSQL' IN BOOLEAN MODE);
浏览此链接 viralpatel.net、devzone.zend.com、sqlmag.com、colorado.edu、en.wikipedia.org