$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。但有没有办法定义这些类别“一”,“两”,“三”,“四”,并说:首先打印所有“一”,然后“两个”...并在这个类别中按名称排序?
答案 0 :(得分:3)
你已经在你的评论中说过&#34;一个&#34; &#34; 2&#34; &#34;三&#34;和&#34;四&#34;是唯一可能的价值观。
因此,您可以使用FIND_IN_SET()功能来实现这一目标。
尝试:
SELECT * FROM animals
WHERE id = ?
ORDER BY FIND_IN_SET(category,'one,two,three,four') ASC, name ASC
FIND_IN_SET(category, 'one,two,three,four')
以逗号分隔值category
为单位返回给定'one,two,three,four'
值位置的索引(从1到n)。
例如,如果category = 'three'
,则FIND_IN_SET(category,'one,two,three,four') = 3
答案 1 :(得分:2)
您可以在自定义上使用FIELD进行排序。
SELECT * FROM animals WHERE id = ? ORDER BY FIELD(category, 'one','two','three')