php - Mysql 查询和对几列进行排序

标签 php mysql

这是我的查询,我想做的是根据这三个条目选择最佳匹配案例并对它们进行排序,以便最匹配的案例首先出现。它不起作用,它显示了满足这些 OR 条件的所有情况。而且它不会按最佳匹配进行排序。那么有没有更好的方法可以用这个想法来编写查询呢?

$displayLeads = $DB->query("SELECT * FROM autoleads WHERE `lead_status`='NEW' AND `contact_email` IS NOT NULL AND (`status_date` = '".$date_sort."' OR `contact_address` LIKE '%".$state_sort."%' OR`status_code` = '".$code_sort."') ORDER BY status_code = $code_sort DESC, status_date = $date_sort DESC"); 

最佳答案

假设“最佳”匹配是指与子查询的最多匹配,那么您可以计算匹配项并按以下顺序排序:

SELECT *
FROM autoleads
WHERE `lead_status`='NEW' AND `contact_email` IS NOT NULL AND
      (`status_date` = '".$date_sort."' OR
       `contact_address` LIKE '%".$state_sort."%' OR
       `status_code` = '".$code_sort."'
      )
ORDER BY (`status_date` = '".$date_sort."' +
          `contact_address` LIKE '%".$state_sort."%' +
          `status_code` = '".$code_sort."'
         ) DESC

这假设没有任何列采用 NULL 值。如果可以,只需将列名称替换为 coalesce(col, '')

关于php - Mysql 查询和对几列进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28114951/

相关文章:

php - 将音频上传到服务器PHP android

mysql - 防止用户使用连字符创建表和/或数据库

java - Spring boot 2 升级 - spring boot data jpa saveAll() very slow

sql - MySQL - 显示按名称分组的名称和地址行,其中名称出现多次

php - 正则表达式匹配特定符号 ' - "( ) * , . : … ; ?`

PHP:检查字符串是否包含软连字符并替换它

mysql - 如何设计 SQL 表以允许存储和检索当前和历史实体配置记录?

java - 在不影响速度的情况下在 MySQL 中检索大型结果集

php - PHP 中的整数检查

php - 按类别对 mysqli/PDO 结果进行分组并将其显示到组中