php - 根据条件数排序

标签 php mysql wordpress sorting

我想使用多个条件从表中过滤掉数据,所以我使用了以下查询。

SELECT * FROM `usersposts`
WHERE (LOWER(`content`) LIKE LOWER('%{$keywords}%')
OR LOWER(`fname`) = LOWER('{$keywords}')
OR  LOWER(`title`) = LOWER('{$keywords}')) AND approval=1"

按预期工作,但现在我需要根据行满足的条件数对结果进行排序。例如,如果一行满足所有 or 语句,那么它应该在顶部,满足单个条件的应该在最后。我怎样才能做到这一点?

我试过的:

WHERE (LOWER(`content`) LIKE LOWER('%{$keywords}%')
OR LOWER(`fname`) = LOWER('{$keywords}')
OR  LOWER(`title`) = LOWER('{$keywords}')) AND approval=1
ORDER BY
    WHEN LOWER(`content`) LIKE LOWER('%{$keywords}%') AND LOWER(`fname`) = LOWER('{$location}') AND  LOWER(`title`) = LOWER('{$keywords}') THEN 1
    WHEN (LOWER(`content`) LIKE LOWER('%{$keywords}%') AND LOWER(`fname`) = LOWER('{$keywords}'))
     OR (LOWER(`post_author_fname`) = LOWER('{$keywords}') AND  LOWER(`title`) = LOWER('{$keywords}'))
     OR (LOWER(`content`) LIKE LOWER('%{$keywords}%') AND  LOWER(`title`) = LOWER('{$keywords}')) THEN 2
    ELSE 3 END 
ASC;

有没有简单的替代方案?

最佳答案

每个条件的计算结果为 true/false,相当于 MySQL 中的 1/0。您使用条件总和按匹配的条件数排序。

ORDER BY (LOWER(`content`) LIKE LOWER('%{$keywords}%')) +
         (LOWER(`fname`) = LOWER('{$keywords}')) +
         (LOWER(`title`) = LOWER('{$keywords}')) DESC

关于php - 根据条件数排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42338994/

相关文章:

html - 网站不会在 chrome 中向下滚动,但在所有其他浏览器中都可以正常工作

zend-framework - WordPress 和 Zend

php - 如何通过 Ant 检索 Composer?

mysql - 使用不同的值更新多行

mysql - 如何授予对mysql的root访问权限?

mysql - sql在一个查询中获取总计数和过滤计数

django - 我可以在 VPS 上使用 WordPress 网站域作为 Django 网站吗?

php - jQuery:加载 PHP 代码片段

php - 缺少扩展 mysqli,phpmyadmin 不起作用

php - 选择一列的最大值,按另一列分组不起作用