mysql - 如何根据关键字对结果进行排序

标签 mysql sql sorting sql-order-by relevance

我正在开发一个分类网站。为了搜索产品或公司,我在前后都使用了通配符 (%)。

$keyword = "%".$user_keyword."%";

我正在使用以下 mysql 查询:

$query = "SELECT DISTINCT   login.id_user,  
                login.company,
                login.district,
                FROM login LEFT JOIN products 
                ON login.id_user = products.id_user
                WHERE   (login.district LIKE ? 
                    AND login.place LIKE ?)
                        AND
                    (login.company LIKE ?
                    OR login.summary LIKE ?
                    OR products.description LIKE ?)
                LIMIT ?, ?";    
                ";

这是有效的。但我想引用关键字对列表进行排序。 例如:如果用户搜索“foo”,可能会得到以下结果:

fool
kafoo
safoora
foo
foolan

我想把“foo”作为第一项

最佳答案

请尝试以下操作:

$query = "SELECT DISTINCT   login.id_user,  
                login.company,
                login.district,
                FROM login LEFT JOIN products 
                ON login.id_user = products.id_user
                WHERE   (login.district LIKE ? 
                    AND login.place LIKE ?)
                        AND
                    (login.company LIKE ?
                    OR login.summary LIKE ?
                    OR products.description LIKE ?)
                order by if(LOCATE('$user_keyword', login.district)=0, 9999, LOCATE('$user_keyword', login.district))+
                         if(LOCATE('$user_keyword', login.place)=0, 9999, LOCATE('$user_keyword', login.place))+
                         if(LOCATE('$user_keyword', login.company)=0, 9999, LOCATE('$user_keyword', login.company))+
                         if(LOCATE('$user_keyword', login.summary)=0, 9999, LOCATE('$user_keyword', login.summary))+
                         if(LOCATE('$user_keyword', products.description)=0, 9999, LOCATE('$user_keyword', products.description))
                LIMIT ?, ?";    
                ";

关于mysql - 如何根据关键字对结果进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19889958/

相关文章:

PHP/MySQL 允许当前用户编辑其帐户信息

php - 复选框不会用 mysql 的勾号更新

sql - 线串的平均方位

sql - 将值转换为两位小数

c# - 是否可以使用 Dapper 执行一个链接到 2 个数据库上的表的查询?

php - Yii 交易和验证问题

sql - 检查在sql中不为空?

Javascript 使用 'pre year' 自定义按年份对对象数组进行排序

C:指向数组的指针和破坏性排序

c++ - 归并排序程序陷入错误