如何按条件对sql结果进行排序?

时间:2014-10-15 17:55:51

标签: php mysql sorting

我的mysql查询是:

$query = $db->query("SELECT * FROM persons WHERE age > 20 OR name LIKE %ali%");

我在这个php源代码中使用了这个查询:

while($result = $db->fetch_array($query))
{
    echo 'name:' . $result['name'] . ' -->> age: '. $result['age'] . '<br/>';
}

我的结果是这样的:

alireza - &gt;&gt; 21个
mohammad - &gt;&gt; 23个
ehsan - &gt;&gt; 28个
alizade - &gt;&gt; 32个
fardin - &gt;&gt; 22个
aliahmad - &gt;&gt;&gt; 35

但我希望首先显示结果,其中“ali”在其名称中,然后显示年龄大于20的结果,如下所示:

alireza - &gt;&gt; 21个
aliahmad - &gt;&gt; 35
alizade - &gt;&gt; 32个
mohammad - &gt;&gt; 23个
ehsan - &gt;&gt; 28个
fardin - &gt;&gt; 22个

除了我,因为我不会说英语。我的语言是波斯语。

3 个答案:

答案 0 :(得分:2)

您可以为ORDER BY子句添加条件。

在您的情况下,您需要以下内容:

ORDER BY
  CASE
    WHEN name LIKE %ali% THEN 0
    ELSE 1
  END,
  age

答案 1 :(得分:1)

您可以添加优先级,然后按此新列进行排序

SELECT name, age, IF(name LIKE '%ali%', 1, 0) as priority FROM persons 
WHERE age > 20 OR name LIKE %ali% ORDER BY priority DESC

答案 2 :(得分:-3)

使用以下

$query = $db->query("SELECT * FROM persons WHERE age > 20 OR name LIKE %ali%" order by age);