首页 > 解决方案 > mysql 之类的查询,如何对表中的两列进行排序,但按一列匹配的结果排序

问题描述

使用下面的代码,我能够返回与搜索词匹配的所有产品。但是,它们的排序方式是,名称与搜索词组不同的产品首先出现,而名称匹配的产品随后出现,因为描述匹配。

如何排序并返回名称首先与搜索词组匹配的产品?

    $sqli = "
SELECT * 
  FROM product 
 WHERE";

Foreach($strarray as $key=>$value){
If($key > 0){
$sqli = $sqli . "OR";
}
$sqli = $sqli . " (Name LIKE '%" . $value . "%' or Description LIKE '%" . $value . "%')";
}

标签: phpmysql

解决方案


添加一个ORDER BY子句:

$ssql .= " ORDER BY Name LIKE '%" . $value . "%' DESC"

布尔表达式为 1 表示 TRUE,0 表示 FALSE,因此按条件排序按行是否与条件匹配。

顺便说一句,您应该学习使用准备好的语句来防止 SQL 注入。请参阅如何防止 PHP 中的 SQL 注入?


推荐阅读