Php mySQL按特定值排序&;那么描述?
假设我有一个mySQL表,其中有一个名为“name”的字段 此字段每行包含一个名称 共有10行:Php mySQL按特定值排序&;那么描述?,php,mysql,sql,Php,Mysql,Sql,假设我有一个mySQL表,其中有一个名为“name”的字段 此字段每行包含一个名称 共有10行: Apple Pear Banana Orange Grapefruit Pineapple Peach Apricot Grape Melon 如何形成查询,因此我从表中选择,我希望详细信息如下所示: Peach Apple Apricot ... and then everything else is listed by descending order. select * from frui
Apple
Pear
Banana
Orange
Grapefruit
Pineapple
Peach
Apricot
Grape
Melon
如何形成查询,因此我从表中选择,我希望详细信息如下所示:
Peach
Apple
Apricot
... and then everything else is listed by descending order.
select *
from fruit
order by
case name
when 'Peach' then 1
when 'Apple' then 2
when 'Apricot' then 3
else 4
end,
name
所以基本上我想在列表的顶部显示一些指定的结果,然后按降序显示其余的结果
谢谢。因为您使用的是php,所以您可以将答案读入数组,在顶部弹出所需的元素并将其存储在临时数组中。按字母顺序对原始数组排序,然后在临时数组前面加上前缀。您可以使用函数使用条件进行排序。
IF()
的文档说明:
IF(expr1、expr2、expr3)
如果expr1为TRUE(expr10和expr1为NULL),则If()返回
expr2;否则返回expr3。IF()返回数字或字符串
值,具体取决于使用它的上下文
因此,您可以使用它对顶部的特定元素进行排序,如下所示:
Peach
Apple
Apricot
... and then everything else is listed by descending order.
select *
from fruit
order by
case name
when 'Peach' then 1
when 'Apple' then 2
when 'Apricot' then 3
else 4
end,
name
选择*
从水果
订购人
如果(名称='Peach',0,1),
如果(名称='Apple',0,1),
如果(名称='Apricot',0,1),
名称描述
这是一系列顺序,第一个优先。因此,如果name='Peach'
,则该值将为0,对于所有其他值,该值将为1。因为在默认ASC顺序中,0在1之前,这确保了“Peach”将位于列表的顶部。系列中的第二个排序指定如何断开第一个排序的连接。在本例中,除“Peach”之外的所有元素都与值为“1”的第一个排序相关联。在这种情况下,“苹果”被推到平局榜首,实际上是总榜单的第二位。等直到最后一个“name DESC”
正如另一个答案所指出的,是一系列IF()
s的替代方案:
当[条件]然后结果[当[条件]然后结果…]
[其他结果]结束
第一个版本返回value=compare\u value的结果。这个
第二个版本返回第一个条件的结果
对。如果没有匹配的结果值,则显示ELSE之后的结果
返回,如果没有其他部分,则返回NULL
你可以这样做:
Peach
Apple
Apricot
... and then everything else is listed by descending order.
select *
from fruit
order by
case name
when 'Peach' then 1
when 'Apple' then 2
when 'Apricot' then 3
else 4
end,
name
这应该适用于任何SQL数据库