引用附图“示例”中的表格。
我们的卡丁车赛车俱乐部使用电子商务软件进行在线注册。每个注册在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
当您执行上述查询时,您将在 $row
中获得与单个 coCartID
相关的所有值,例如 $row["DriverName"]
, $row['1stClass']
...在每次循环迭代中
关于php - 按列值对 mySQL 结果进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47974684/