Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php mySQL按特定值排序&;那么描述?_Php_Mysql_Sql - Fatal编程技术网

Php mySQL按特定值排序&;那么描述?

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

假设我有一个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 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数据库