【问题标题】:How to show records in php from database in specific order如何按特定顺序从数据库中显示 php 中的记录
【发布时间】:2015-10-31 06:25:52
【问题描述】:

我正在用 php 编写一个程序,通过在我的查询字符串中添加“按'列名'排序”按字母顺序从数据库中选择记录

例如我们有条目

A B M L H V V F 现在按字母顺序显示记录后,它将按以下顺序获取记录

A B F H L M V V

现在如果我的用户想查看 m 的记录,那么他应该通过以下方式获取记录

M A B F H L V V

表示在顶部搜索记录,然后按字母顺序。

那么如何通过一次查询以这种方式获取记录

$result=mysqli_query($con,"SELECT * from orders order by 'name'");

【问题讨论】:

标签: php sql


【解决方案1】:

使用order by name='M' desc

SELECT * from orders order by name='M' desc,name ASC

【讨论】:

  • 但它不会将特定行置于顶部。在(M A B F H L V V 顺序)
  • SELECT * from orders order by name='M' desc,name ASC
【解决方案2】:

你可以试试这个

select * 
from orders
order by name = 'M' desc, name asc

或者

select * 
from orders
order by case when name = 'M' then -1 else name end

来源:mysql SQL: specific item to be first and then to sort the rest of the items

【讨论】:

  • 除非 MySQL 会自动将 -1 转换为字符串,否则 case 将不起作用。如果这是真的,那么它依赖于在所有真实姓名之前的连字符排序。
【解决方案3】:

使用两个查询,第一个获取所需字母的所有记录,以问题中的查询为起点(假设所需字母为M):

SELECT * FROM orders WHERE name LIKE '%m' ORDER BY 'name'

那么对于第二个查询:

SELECT * FROM orders WHERE name NOT LIKE '%m' ORDER BY 'name'

然后让 PHP 将第二个查询的结果集附加到第一个查询的结果集。 ORDER BY 子句中使用的字段需要在两个查询中匹配。如果您希望在一个查询中按顺序对两个部分进行排序,我认为这是不可能的

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-15
    • 1970-01-01
    • 1970-01-01
    • 2015-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多