假设我有一张叫做“水果”的桌子,在那张桌子上我有一排叫做“水果”,有六个条目:Apple,Banana,Kiwi,Orange,Peach,Tangerine。
我有四个网站想要以不同的方式对SELECT * FROM Fruits
的结果进行排序,但它们没有模式。 他们不是随机的,因为每个网站都会采用不同的方式对其进行排序。例如,一个网站可能是“Kiwi,Apple,Banana,Tangerine,Orange,Peach”,其次可能是“Banana,Kiwi,Apple,Peach,Tangerine,Orange”。
这些可以像这样在MySQL中进行排序,记住未来的项目可能会被添加,需要在每个站点的意外情况下任意排序吗?或者有没有办法在PHP被拉出后在PHP中对这些结果进行排序?
答案 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();