2012-04-03 56 views
1

我正在寻找一种可能性,通过不属于结果集或数据库本身的权重来排列mysql结果。数据库和权重之间的唯一联系是基于权重存在的唯一列。Mysql根据外部值对唯一字段进行加权

更准确地说我已经得到了MySQL表

+-------------------+ 
|Food    | 
+-------------------+ 
|id:int(unique)  | 
|name:string  | 
+-------------------+ 

和权重的食品ID之一外部源。例如,用户使用100来加权食物1,使用200加食物2和加50加食物3.我想要的是用用户给出的重量来命令结果。

你有什么想法可以将这些外部信息应用到结果中吗?


编辑:我没有寻找一个解决方案,后来订购查询结果!我想要结果由MySQL服务器进行排序。

+0

你是什么意思由外部来源? – 2012-04-03 13:31:58

+0

我目前正在编码这个在PHP中,所以外部资源是一个PHP数组(以前由REST请求填充)在这种情况下。 – sics 2012-04-03 13:36:48

回答

4

在这里你去:

SELECT 
CASE id 
when 1 then 300 
when 2 then 100 
when 3 then 200 
END as weight 
from tab 
order by weight; 

你在这里做什么是你的自定义值替换现有行的值,然后用这些值排序。

+0

这正是我一直在寻找的。非常感谢你! – sics 2012-04-03 13:49:53

+0

那么如果它是正确的,你可以接受它作为正确的答案! :) – Subodh 2012-04-03 13:50:44

+0

你知道mysql是否将权重映射到id以及索引是否也可以用于映射? – 2012-04-03 13:51:01

0

如果你的外部来源是phparray。那么你应该使用php arraysorting函数而不是在mysql查询中排序。

从MySQL表中获取reuired数据并创建一个php数组。现在制作一个外部数据源的数组,并结合这两个数组并使用array排序。

列出了她的PHP数组排序函数。您可以根据需要使用。

http://php.net/manual/en/array.sorting.php

+0

这对少量数据来说看起来不错。在我的情况下,db表包含超过一百万个条目。因此,在第一步中提取完整的数据集仅仅是为了将该集合排序并过滤为50个条目,应该比使用mysql功能更昂贵。尽管如此,谢谢你的回答! – sics 2012-04-03 13:56:43

相关问题