php - 在 select 语句中确定字符串的优先级

标签 php mysql

我有一个 select 语句,如果一个字符串包含下面的任何单词,它会选择它,但它不会按照单词包含的顺序选择它。例如,如果数据库中的字符串是“三二一”,而不是“一二三”,它无论如何都会选择它。我想做到这一点,以便它首先按照字符串的顺序排列优先级,然后再尝试获取那些不符合该顺序的字符串。这可能吗?

$text1 = "one";
$text2 = "two";
$text3 = "three";

SELECT text,
((text LIKE '%$text1%') + (text LIKE '%$text2%') + (text LIKE '%$text3%')) as `matches` 
FROM tableName 
HAVING `matches` > 0
ORDER BY `matches` DESC, rand() LIMIT 1

更多例子: 所以,如果数据库中有 2 个字符串。

一个是

"one two three" 

另一个是

"three two one"

我想先选有“一二三”的,如果没有“一二三”,再选“三二一”;

最佳答案

您可以在order by中指定优先级:

SELECT text,
       ((text LIKE '%$text1%') + (text LIKE '%$text2%') + (text LIKE '%$text3%')) as `matches` 
FROM tableName 
HAVING `matches` > 0
ORDER BY `matches` DESC, 
         (case when text like '%$text1%$text2%text3%' then 1
               when text like '%$text3%$text2%text1%' then 2
               . . .
          else 999 end),
         rand()
LIMIT 1;

关于php - 在 select 语句中确定字符串的优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32597231/

相关文章:

php - 更新 MySQL 和日期时间本地字段

mysql - 我想将初始值设置为主键,该主键也设置为自动增量选项,例如它从mysql中的值7899开始?

mysql - 如何按特定顺序对结果进行分组?

php - mysql_fetch_assoc 以错误的顺序返回结果

php - Android与php和mysql的连接返回空结果

PHP MySQL 查询多个值,然后与 HTML 输入进行比较,然后根据每个结果进行回显

php - FuelPHP 查询生成器加入多个字段

php - magento 打印友好的产品页面

mysql - 来自航空公司管理方案的 SQL 子查询

php - 在 laravel 中包含 css 文件的层次结构以避免 css 覆盖