drutjkpsr67393592 2011-10-14 20:36
浏览 40
已采纳

按原型排序

There are 6 possible keys in a MySQL field. Lets call them types. Through PHP, I have defined an array, that is called $order, and arranges these types in order I want them to appear.

There is a table, articles, which has a field articles.type . Any article can have 0-6 types added to it. Now, what I want to do, is grab all of the articles, and order them from the prototype. What is the best way to do this? Can this be done in MySQL, since I suppose that would be faster? And if not, how can it be done in PHP?

Example:

Table:

id     articleId     type
1      3             type1
2      3             type2
3      3             type3
4      3             type4
5      4             type5
6      4             type6
7      5             type5
8      7             type1
9      7             type5

Order:

$order=array('type1','type2','type3','type4','type5','type6');

How do I fetch the results ordered by my $order variable?

  • 写回答

2条回答 默认 最新

  • douqi3064 2011-10-14 20:46
    关注

    You'd need to massage that array into a mysql-style if/case statement:

    $order_by = "ORDER BY CASE";
    $pos = 1;
    foreach ($order as $clause) {
       $order_by .= " CASE `type`='$clause' THEN " . $pos++;
    }
    $order_by .= " ELSE " . $pos++;
    

    which would generate something like

    ORDER BY CASE
       WHEN `type`='type1' THEN 1
       WHEN 'type`='type2' THEN 2
       ...
       ELSE n
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 echarts动画效果失效的问题。官网下载的例子。
  • ¥60 许可证msc licensing软件报错显示已有相同版本软件,但是下一步显示无法读取日志目录。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥30 关于<main>标签页面跳转的问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加