使用Priority对MySQL搜索结果进行排序

时间:2014-11-26 18:28:58

标签: php mysql sorting

我知道这个问题已经在这里被问了好几次,但是仔细查看这些线程并没有给我任何帮助。我使用ORDER BY "column Name"按字母顺序对搜索结果进行排序。但是,我希望始终将一个搜索结果放在首位。

所以我会按照名称列对它们进行排序,但我总是希望Zaboomafoo成为第一个结果。我该怎么做呢?这是我的PHP:

$sql = "SELECT * FROM `" . $db_table . "` WHERE (UPPER(city) LIKE UPPER('%$searchq%') OR UPPER(postal) LIKE UPPER('%$searchq%')) AND disable = 1 ORDER BY name";

while($row1 = mysqli_fetch_array($query))
        {
            $name = $row1['name'];
            $business  =$row1['business'];
            $description = $row1['description'];
            $email = $row1['email'];
            $phone = $row1['phone'];
            $image = $row1['image'];
        }

然后我将该信息输出到一个名为output的变量中,并将其回显到屏幕上。

3 个答案:

答案 0 :(得分:1)

尝试这样的事情:

SELECT *
FROM table_name
WHERE (UPPER(city) LIKE UPPER('%$searchq%') 
  OR UPPER(postal) LIKE UPPER('%$searchq%')) 
  AND disable = 1 
ORDER BY IF(name = 'Zaboomafoo', 0, 1), name

答案 1 :(得分:0)

如果您只希望一个特定名称始终位于顶部,则可以执行

SELECT ... ORDER BY name = 'Zaboomafoo' DESC, name;

如果您想要固定多行,您可能最好添加一个单独的priority列并执行

SELECT ... ORDER BY priority DESC, name;

答案 2 :(得分:0)

只是为了各种各样的缘故:

SELECT name
     ...
    , priority = CASE name
            WHEN 'Zaboomafoo' THEN 999
            WHEN 'Barzaboma' THEN 111
        END
FROM some_table
ORDER BY priority DESC
    , name