【问题标题】:MySQL PHP - SELECT WHERE based on a different positionMySQL PHP - 根据不同的位置选择 WHERE
【发布时间】:2014-04-25 02:55:18
【问题描述】:

是否可以根据在 certaid ID 上设置的订单值对数据进行排序?

我想做以下事情:

    ID - Position
    1  - 3rd
    2  - 4th
    3  - 5th
    4  - 6th
    10 - 7th
    11 - 8th
    12 - 9th
    13 - 10th
    14 - 11th
    83 - 2nd
    84 - 1st

我一直在尝试实现这个,但它没有生成正确的顺序:

SELECT * FROM table_name WHERE id IN (1,2,3,4,5,6,7,81,82) ORDER BY id = 3 DESC, id = 4 DESC, id = 5 DESC, id = 6 DESC, id = 7 DESC, id = 8 DESC, id = 9 DESC, id = 1 DESC, id = 2 DESC

如果我不清楚,请向我询问更多信息。提前谢谢你。

【问题讨论】:

  • 您想按位置排序?
  • 为什么用后缀存储位置?您可以只存储该字段的位置和顺序的整数值。

标签: php mysql select where


【解决方案1】:
SELECT * FROM table_name WHERE id IN (1,2,3,4,5,6,7,81,82) ORDER BY CAST(SUBSTR(position, 1, CHAR_LENGTH(position) - 2) as unsigned)

【讨论】:

    【解决方案2】:

    是的,您可以使用 order by FIELD ,下面是一个示例,您可以按照自己的方式进行修改。

    SELECT * FROM 
    table_name 
    WHERE id IN (1,2,3,4,5,6,7,81,82)
    order by FIELD(id,3,4,5,1,2,6,7,81,82)
    

    http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_field

    【讨论】:

    • 根据他的表格,这是错误的顺序,至少缺少数字 84。
    • 这只是我提供的文档链接的一个示例,稍微查找文档并自行尝试即可解决问题。
    • 我明白了。我在想他可能会认为ORDER BY FIELD 会以相反的顺序返回。因为他希望他的最大数先返回,而你有一个大数最后返回......
    • 在您的屏幕截图中,您有一个问题编号,我想您也将其存储在 DB 中,如果是,为什么不按该编号排序?由于这种方式你需要在排序之前知道顺序。
    • 是的..这就是我所做的..但我不知道如何将其用作我的排序位置..
    【解决方案3】:

    我认为这就足够了,您不需要在其中添加任何内容。

    SELECT * FROM table_name WHERE id IN (1,2,3,4,5,6,7,81,82) ORDER BY id DESC
    

    或者您可以使用,如果需要特定的 ID 序列,

    SELECT * FROM  table_name  WHERE id IN (1,2,3,4,5,6,7,81,82) order by FIELD(id,3,4,5,6,7,8,9,1,2)
    

    或者你可以使用ORDER BY CASE

    【讨论】:

    • 这会将82 放在第一位,81 放在第二位,然后将7 放在第三位。这是不正确的。订单应该去84, 83, 1...
    • 84,83,1,2,3,4,10,11,12,13,14
    • 你可以设置任何你想要的顺序......此时你需要使用你的常识。
    猜你喜欢
    • 2012-09-10
    • 1970-01-01
    • 2017-03-25
    • 1970-01-01
    • 2010-10-28
    • 1970-01-01
    • 1970-01-01
    • 2012-03-17
    • 2020-10-14
    相关资源
    最近更新 更多