在不同站点上以不同顺序对MySQL字段进行排序

时间:2014-04-03 11:40:56

标签: php mysql

假设我有一张叫做“水果”的桌子,在那张桌子上我有一排叫做“水果”,有六个条目:Apple,Banana,Kiwi,Orange,Peach,Tangerine。

我有四个网站想要以不同的方式对SELECT * FROM Fruits的结果进行排序,但它们没有模式。 他们不是随机的,因为每个网站都会采用不同的方式对其进行排序。例如,一个网站可能是“Kiwi,Apple,Banana,Tangerine,Orange,Peach”,其次可能是“Banana,Kiwi,Apple,Peach,Tangerine,Orange”。

这些可以像这样在MySQL中进行排序,记住未来的项目可能会被添加,需要在每个站点的意外情况下任意排序吗?或者有没有办法在PHP被拉出后在PHP中对这些结果进行排序?

5 个答案:

答案 0 :(得分:1)

一种可能的方法是设置所谓的“排序地图” - 水果名称字符串,按照您希望显示的确切顺序排列项目。然后,您将能够将此数组与FIND_IN_SET MySQL函数一起使用:

$sortMap = 'Kiwi,Apple,Banana,Tangerine,Orange,Peach';

$query = >>>QUERY
   SELECT fruit_id, fruit_name
     FROM fruits
 ORDER BY FIND_IN_SET(fruit_name, '$sortMap');
QUERY;

// do something with the query

要更改排序,只需按站点设置$sortMap

答案 1 :(得分:0)

好的,这最终在这里工作得最好:

    SELECT `fruit` 
    FROM (`Fruit`) 
    ORDER BY FIELD(`fruit`, 'Tangerine','Banana','Apple', 'Orange', 'Peach', 'Kiwi') ASC

正如raina77ow建议的那样,我创建了一个排序映射来保存我想要注入查询的值。这被视为我们可以为每个站点切换的配置值。谢谢你的指导!

答案 2 :(得分:-1)

试试这个:

 SELECT * FROM Fruits ORDER BY rand()
  • 这会给你一个随机的结果集顺序!

答案 3 :(得分:-1)

您需要为每个值分配某种网站订单标识符,或者至少在逻辑上将它们与fruit_type字段分组。否则你可以使用

SELECT ... IF(fruit = 'apple',1,0) as fruit_apple ... ORDER BY ... fruit_apple

这是一个非常不优雅的解决方案。

您是否考虑过将桌子正常化,移动苹果和桌子;订购到一个单独的表,然后根据要求加入它们?

答案 4 :(得分:-2)

使用此方法检索值 ORDER BY rand();