php - 如何使用子字符串按两个值排序
问题描述
我正在使用 PHP 和 MySQL 在屏幕上显示一些数据,但我需要使用 2 列对表的行进行排序。
在一列上Restricted
,我有以下 json ( ["PT","GB"]
)
在另一列rate
我有十进制值从0
到10
我正在寻找一种首先订购的方法Restriced
包含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 |
解决方案
您需要使用以下提到的步骤:
- 打破你的记录分为 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)
推荐阅读
- c++ - 试图解决嵌套向量上的骑士之旅
> 但它不起作用 - coingecko - 将 Coingecko 表导入 Google 电子表格
- java - 如何使用retrofit2发送文件多部分正文?
- javascript - 将值存储在变量中
- python - 正确使用来自 tfds.load() 的 Cifar-10 数据集
- javascript - 为什么这些关于 timer(setTimeout()) 的代码,Promises 的 then() 方法是这样运行的?
- file-upload - tus如何设置文件名
- python - Plotly:在轴刻度中隐藏日期,但在悬停标签中显示
- javascript - 如何在javascript中将坐标转换为二维数组
- flutter - Flutter中的异步加密/解密文件(例如视频)