Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP的加权搜索算法 问题_Php_Mysql_Algorithm_Search_Weighted - Fatal编程技术网

PHP的加权搜索算法 问题

PHP的加权搜索算法 问题,php,mysql,algorithm,search,weighted,Php,Mysql,Algorithm,Search,Weighted,表[1]中有5个项目,每个项目有4个属性:红色、绿色、蓝色和黄色。 每个属性都可以得到1到9分[2] 在“我的网站”上执行搜索时,用户可以通过给每个属性一个介于1到9之间的分数来指定每个属性与搜索结果的相关性 我应该使用什么算法根据用户偏好计算和排序结果 资源 [1] -创建表项id INT NOT NULL AUTO_INCREMENT,name VARCHAR128,红色INT,绿色INT,蓝色INT,黄色INT,主键id [2] -在项目名称中插入红色、绿色、蓝色、黄色值“随机1”、4、1

表[1]中有5个项目,每个项目有4个属性:红色、绿色、蓝色和黄色。 每个属性都可以得到1到9分[2]

在“我的网站”上执行搜索时,用户可以通过给每个属性一个介于1到9之间的分数来指定每个属性与搜索结果的相关性

我应该使用什么算法根据用户偏好计算和排序结果

资源 [1] -创建表项id INT NOT NULL AUTO_INCREMENT,name VARCHAR128,红色INT,绿色INT,蓝色INT,黄色INT,主键id


[2] -在项目名称中插入红色、绿色、蓝色、黄色值“随机1”、4、1、9、4、“随机2”、1、1、2、9、“随机3”、5、7、6、3、“随机4”、2、2、8、1

将搜索标点计算为一个字段,并按它对查询进行排序

SELECT *, (red * @rw) AS w1, (green * @gw) AS w2, (blue* @bw) AS w3, (yellow * @yw) AS w4, (w1 + w2 + w3 + w4) AS result 
  FROM items ORDER BY result DESC; 
@rw=>红色重量,@bw=>蓝色重量,等等。

把它加起来就行了

<?php
require('connect.php') //your db connection data
$redWeight=$_REQUEST['howeverYouPassedTheRedWeighting'];
$blueWeight=$_REQUEST['howeverYouPassedTheBlueWeighting'];
$yellowWeight=$_REQUEST['howeverYouPassedTheYelloWeighting'];
$greenWeight=$_REQUEST['howeverYouPassedTheGreenWeighting'];
$query="SELECT name, ( red*$redWeight+green*$greenWeight+blue*$blueWeight+yellow*$yellowWeight ) AS value FROM items ORDER BY value DESC";
$res=mysql_query($query);
//etc.
?>

我不确定我是否理解了你的意思,但是这个怎么样:

$user_defined_relevance = array ('red' => 1, 'blue' => 3, 'green' => 2, 'yellow' => 7);
arsort($user_defined_relevance); //this sorts the array by value descending while maintaining index association

$query = 'SELECT * FROM items ORDER BY '.implode(array_keys($user_defined_relevance), ',  DESC');
//will make SELECT * FROM items ORDER BY yellow DESC, blue DESC, green DESC, red DESC;
mysql_query($query);
 ...

对不起,我没有直接的答案。这是一个非常有趣的话题。您可以使用与欧几里德距离或皮尔逊相关性相关的东西。你可以在有关集体智慧的书籍中找到更多

当然,实现这样的事情会更加困难,但是你的结果会更加准确和精确。我推荐这些书:


我刚刚尝试过这个,但它实际上不起作用-在“字段列表”中的未知列“w1”去掉括号,并在phpit works中替换@rx变量作为它的真实值,在mysql客户端中尝试这个:选择5*4作为mult;