php - 如何按单个顺序对 mySQL 结果进行排序?

标签 php mysql pdo

$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。但是有没有一种方法可以定义这些类别“一”“二”“三”“四”并说:首先打印所有“一”,然后是“二”......并在这个类别中按名称排序?

    最佳答案

    您在评论中说过,“一”、“二”、“三”和“四”是唯一可能的值。

    因此您可以使用 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 值的位置索引(从 1 到 n)值 'one,two,three,four'

    例如,如果 category = 'three',则 FIND_IN_SET(category,'one,two,three,four') = 3

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

    相关文章:

    php - 使用 mysql 和 mysqli

    php - 如何在mysql中填充数据

    php - 根据表单选择生成表单

    mysql - 将多列匹配到多行子查询?

    php - 从结果集中选择列到数组中

    php - 将文件从一台服务器保存到另一台服务器

    mysql - 类型错误 : Cannot read property 'findAll' of undefined(sequelize)

    php - UTF-8贯穿始终

    php - 如何在 SQL 查询中使用 session 变量?

    php - 尝试在 MYSQL 表中显示 'name' 而不是 'id'