php - 按列值对 mySQL 结果进行排序

标签 php mysql sorting

Example

引用附图“示例”中的表格。

我们的卡丁车赛车俱乐部使用电子商务软件进行在线注册。每个注册在coCartID列中都有一个唯一的编号。然后,所有注册详细信息(车手姓名、卡丁车编号等)与选项具有同等地位,因此它们都出现在同一列 coCartOption 中,并由 coCartOption 中的标题标识。 em>coOptID 列。

我设法显示最新注册的排序列表:

$sql = "
SELECT coCartID, coOptGroup, coCartOption, coOptID
FROM cartoptions
WHERE coCartID > 2200 AND (coOptGroup = '*Driver Name:' OR coOptGroup = '*1st Class - $85:' OR coOptGroup = '1st Class - $100:' OR coOptGroup = '*1st Class Kart #:' OR coOptGroup = '1st Transponder #:' OR coOptGroup = '2nd Class - $25:' OR coOptGroup = '2nd Class Kart #:' OR coOptGroup = '2nd Transponder #:')
ORDER BY coCartID ASC, coOptID DESC
";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo $row["coOptGroup"] . $row["coCartOption"] . "<br>";
    }
} else {
echo "0 results";
}
$conn->close();
?> 

使用上面的代码,信息显示在每行之间有中断,我只能通过将coOptID设置为升序或降序来控制顺序:

卡里·希尔维格
33
高级世界方程式
阿曼·康奈尔
9193664
100cc大师
99
弗雷德·布劳维尔特
高级世界方程式
77

问题 1:如何将具有相同 coCartID 的所有条目合并并显示在一行中。我在 fetch_assoc、fetch_array 和 fetch_row 上度过了几个令人沮丧的小时,但无论如何我都无法将中断放置在正确的位置:

Kari Hillwig,高级世界方程式赛车手,33 岁
阿曼·康奈尔 (Arman Cornell),100cc 大师级,99 岁,9193664
Fred Blauvelt,高级世界方程式赛车手,77 岁

问题 2:除了 ASC 或 DESC 之外,是否可以按特定顺序对 coOptID 数据进行排序? (如果是这样,我可以按相同的顺序显示相应的coCartOption数据)。

提前谢谢您,

最佳答案

您可以使用以下查询来按行获取固定编号的每个 coCartID 的数据。 coOptGroup(s)

SELECT coCartID,
MAX(CASE WHEN coOptGroup = '*Driver Name:' THEN coCartOption ELSE NULL END) DriverName,
MAX(CASE WHEN coOptGroup IN('*1st Class - $85:','1st Class - $100:' ) THEN coCartOption ELSE NULL END) 1stClass,
MAX(CASE WHEN coOptGroup = '*1st Class Kart #:' THEN coCartOption ELSE NULL END) 1stClassKart,
MAX(CASE WHEN coOptGroup = '1st Transponder #:' THEN coCartOption ELSE NULL END) 1stClassTransponder,
MAX(CASE WHEN coOptGroup ='2nd Class - $25:'  THEN coCartOption ELSE NULL END) 2ndClass,
MAX(CASE WHEN coOptGroup = '2nd Class Kart #:' THEN coCartOption ELSE NULL END) 2ndClassKart,
MAX(CASE WHEN coOptGroup = '2nd Transponder #:' THEN coCartOption ELSE NULL END) 2ndClassTransponder
FROM cartoptions
WHERE coCartID > 2200
AND (coOptGroup = '*Driver Name:' 
    OR coOptGroup = '*1st Class - $85:' 
    OR coOptGroup = '1st Class - $100:' 
    OR coOptGroup = '*1st Class Kart #:' 
    OR coOptGroup = '1st Transponder #:' 
    OR coOptGroup = '2nd Class - $25:' 
    OR coOptGroup = '2nd Class Kart #:' 
    OR coOptGroup = '2nd Transponder #:'
)
GROUP BY coCartID
ORDER BY coCartID ASC

DEMO

当您执行上述查询时,您将在 $row 中获得与单个 coCartID 相关的所有值,例如 $row["DriverName"]$row['1stClass'] ...在每次循环迭代中

关于php - 按列值对 mySQL 结果进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47974684/

相关文章:

php - 如何在类构造函数中定义常量?

php - 事件菜单类

php - MySQL:按子句分组

mysql - 选择与另一列具有相同属性的一列

php - 自动生成 token 在 php 中无法正常运行

php - 在 CakePHP 3 中更新/插入关联表数据

mysql - Zabbix 触发器用于大量 MySQL 连接

XSLT 按字母顺序和数字顺序排序问题

javascript - Javascript 中高效的人类可读日期字符串排序算法

r - 按大小写对一系列列进行排序并将该排序顺序应用于另一列范围