这是我的查询,我想做的是根据这三个条目选择最佳匹配案例并对它们进行排序,以便最匹配的案例首先出现。它不起作用,它显示了满足这些 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/