【发布时间】:2017-04-11 21:34:16
【问题描述】:
$pdo = $db->prepare('SELECT * FROM animals WHERE id = ?');
$pdo->execute(array($id));
$animals = $pdo->fetchAll();
foreach ($animals as $row) {
echo "<li>".$row["category"]."/".$row["name"]."</li>";
}
我的结果是:
我现在想按类别对结果进行排序。不是按第一个字母,而是按逻辑顺序。所以最后我的结果应该是:
当然,这不适用于 ORDER BY ASC。但是有没有办法定义这些类别“一”“二”“三”“四”并说:首先打印所有“一”,然后是“二”......并在这个类别中按名称排序?
【问题讨论】:
-
如果你有一个额外的列 CategoryNumber,它是一个表示类别的 int 列,那么
ORDER BY CategoryNumber, Name就可以了。您的问题是尝试对字符串进行排序,就好像它是一个数字一样。 -
认为您应该在您的 php 代码中执行此操作。将“字符串数字”转换为数字并对其进行排序
-
在您的数据库中添加一个名为“order”的列,对于所有“one”插入“1”,对于“two”插入“2” - 然后您可以使用 SQL 的 ORDER BY 功能:)
-
检查一下,这可能对你有帮助:stackoverflow.com/questions/43320777/…
-
它也被称为“糟糕的数据库设计”...但是是的,您可以在 PHP 中创建一个可比较的数组(一个 => 1、两个 => 2...)等等,并使用它。