Php 在不同站点上按不同顺序排序MySQL字段

Php 在不同站点上按不同顺序排序MySQL字段,php,mysql,Php,Mysql,假设我有一个名为“水果”的表格,在该表格中有一行名为“水果”,其中有六个条目:苹果、香蕉、猕猴桃、橘子、桃子、橘子 我有四个网站希望以不同的方式对SELECT*FROMFruits的结果进行排序,但它们没有模式它们不是随机的,因为每个站点将决定不同的排序方式。例如,一个站点可能是“猕猴桃、苹果、香蕉、橘子、橘子、桃子”,下一个站点可能是“香蕉、猕猴桃、苹果、桃子、橘子、橘子” 这些可以在MySQL中像这样排序吗?记住,将来可能会添加项目,并且需要根据每个站点的突发奇想重新排序?或者有没有一种方法

假设我有一个名为“水果”的表格,在该表格中有一行名为“水果”,其中有六个条目:苹果、香蕉、猕猴桃、橘子、桃子、橘子

我有四个网站希望以不同的方式对SELECT*FROM
Fruits
的结果进行排序,但它们没有模式它们不是随机的,因为每个站点将决定不同的排序方式。例如,一个站点可能是“猕猴桃、苹果、香蕉、橘子、橘子、桃子”,下一个站点可能是“香蕉、猕猴桃、苹果、桃子、橘子、橘子”


这些可以在MySQL中像这样排序吗?记住,将来可能会添加项目,并且需要根据每个站点的突发奇想重新排序?或者有没有一种方法可以在这些结果被提取后在PHP中对其进行排序?

试试这个:

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

 SELECT * FROM Fruits ORDER BY rand()
  • 这将给你一个随机的结果集顺序
您需要为每个值分配某种类型的站点订单标识符,或者至少在逻辑上将它们与水果类型字段分组。否则,您可以使用

SELECT ... IF(fruit = 'apple',1,0) as fruit_apple ... ORDER BY ... fruit_apple
这是一个极不雅观的解决方案


您是否考虑过将表标准化,将苹果和订单移动到一个单独的表中,然后根据请求将它们连接起来?

您需要为每个值分配某种类型的站点订单标识符,或者至少用水果类型字段对它们进行逻辑分组。否则,您可以使用

SELECT ... IF(fruit = 'apple',1,0) as fruit_apple ... ORDER BY ... fruit_apple
这是一个极不雅观的解决方案


您是否考虑过将表标准化,将苹果和订单移动到单独的表中,然后根据请求将它们连接起来?

使用此方法检索值
兰德订单()

使用此
兰德订单()

一种可能的方法是设置所谓的“排序图”——水果名称的字符串,按照您希望的顺序显示项目。然后,您就可以将此阵列与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

一种可能的方法是设置所谓的“排序图”-水果名称字符串,使项目按您希望的顺序显示。然后,您就可以将此阵列与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

好的,在这里效果最好:

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

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

好的,这在这里效果最好:

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


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

不,它们不是随机的。每个站点都需要一个与其他站点不同的特定顺序。我看不出你的问题中有任何模式!您只指定了2个排序示例我认为您可以使用order BY FIELD()处理mysql,因为您知道每个站点的排序顺序。检查一下这里的文件要看情况。。。我以前在数据库中使用了
site
表来存储在同一系统上运行的不同站点的配置选项。然后,您可以有一个类似于
fruit\u to\u site
的表,其中包含
fruit.id
site.id
sort\u order
索引,然后您可以按站点对水果进行排序。或者,如果站点运行在不同的代码上,但来自同一个数据库,则可以在应用程序级别进行排序。@CD001解决方案似乎可行,它们不是随机的。每个站点都需要一个与其他站点不同的特定顺序。我看不出你的问题中有任何模式!您只指定了2个排序示例我认为您可以使用order BY FIELD()处理mysql,因为您知道每个站点的排序顺序。检查一下这里的文件要看情况。。。我以前在数据库中使用了
site
表来存储在同一系统上运行的不同站点的配置选项。然后,您可以有一个类似于
fruit\u to\u site
的表,其中包含
fruit.id
site.id
sort\u order
索引,然后您可以按站点对水果进行排序。或者,如果站点运行在不同的代码上,但来自同一数据库,则可以在应用程序级别进行排序。@CD001解决方案似乎可行。请重新阅读问题。OP说它们不是随机的。请再读一遍这个问题。OP说它们不是随机的。“不,它们不是随机的。每个网站都想要一个不同于其他网站的特定顺序“谁在不看问题的情况下投票?”不,它们不是随机的。每个网站都想要一个不同于其他网站的特定顺序:谁在不看问题的情况下投票?实际上,他们是办公室,每个都有自己的网站。“office”表中有12个办公室,其中包含所有办公室的信息。它们总是在顶部显示“self”office,然后顺序是任意的(我按字母顺序排列,但这不起作用)。因此,我假设一个名为“ordering”的表可以使用“office_id”作为外键。如果您可以控制数据库,则可以将信息存储为json元数据,否则您可能会看到一个类似于EAV或4列的表,其中引用了主办公室的外键,其他办公室和订单。不确定为什么我的答案被否决。请给出一个原因。事实上,他们都有自己的网站。“office”表中有12个办公室,其中包含所有办公室的信息。它们总是在顶部显示“self”office,然后顺序是任意的(我按字母顺序排列,但这不起作用)。所以我想有一张桌子叫