Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.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 - Fatal编程技术网

Php 如何使用子字符串按两个值排序

Php 如何使用子字符串按两个值排序,php,mysql,Php,Mysql,我使用PHP和MySQL在屏幕上显示一些数据,但我需要使用两列对表中的行进行排序 在一列上Restricted 我有以下json([“PT”,“GB”]) 在另一列rate中,我有从0到10 我正在寻找的是一种先订购restrictedcontainsGB然后再订购rateDESC的方法(如果我只能使用mysql就最好了) 目前的SQL是 SELECT * FROM Partner ORDER BY FIELD (restricted, '%GB%'), FIELD rate DESC 我已经

我使用PHP和MySQL在屏幕上显示一些数据,但我需要使用两列对表中的行进行排序

在一列上
Restricted
我有以下json(
[“PT”,“GB”]

在另一列
rate
中,我有从
0
10

我正在寻找的是一种先订购
restricted
contains
GB
然后再订购
rate
DESC的方法(如果我只能使用mysql就最好了)

目前的SQL是

SELECT * FROM Partner ORDER BY FIELD (restricted, '%GB%'), FIELD rate DESC
我已经在网上搜索了一个解决方案,我已经做了将近一个月了,没有找到解决方案

**编辑** 应该是什么样子

Partner Name      |    Countries     |   rate    |

AAAAA             | ["GB","FR","PT"] |    9.0    |
BBBBB             | ["GB","FR","PT"] |    8.8    |
CCCCC             | ["GB","FR","PT"] |    7.2    |

DDDDD             | ["US","FR","PT"] |    9.0    |
EEEEE             | ["US","FR","PT"] |    8.8    |
FFFFF             | ["US","FR","PT"] |    7.2    |

您需要使用以下提到的步骤:

  • 将记录分成两部分(有“GB”和没有“GB”)
  • 根据您的逻辑分别对两个记录集进行排序
  • 使用UNION ALL连接两个记录
  • 因此,您的查询应如下所示:

    (SELECT * FROM partner where restricted like '%GB%' ORDER BY restricted, 
    rate DESC)
    union all
    (SELECT * FROM partner where restricted not like '%GB%' ORDER BY restricted, 
    rate DESC)
    

    从受限制的合作伙伴(如“%GB%”)中选择*ORDER BY Restricted,rate DESC?不起作用,因为我必须显示所有行,即使它不包含GB。无论如何,感谢您的快速回复,使用LIKE它将只锁定显示有GB的行的数据“我必须显示所有行,即使它不包含GB”->跳过WHERE/LIKE部分然后?:-)我不明白。请举例说明您的数据,以及您希望如何查看订单。我已在其中添加了一个演示表,因此可以查看我正在寻找的订单。我认为这是一个可能的解决方案!谢谢DSomehow Mysql没有正确地按速率排序,目前我所做的是创建两个单独的查询,然后将它们与PHP结合起来。不是最好的解决方案,因为它会减慢网站加载时间。