如何按最短字符串或从第一个字符开始最相关的方式按sql顺序选择字符串

问题描述 投票:0回答:1

我的 php 中有一个查询,如下所示:

$query ="
SELECT ydzdn_terms.term_id,ydzdn_terms.name 
FROM ydzdn_terms 
INNER JOIN ydzdn_term_taxonomy on 
 (ydzdn_terms.term_id=ydzdn_term_taxonomy.term_id ) 
WHERE  ydzdn_term_taxonomy.taxonomy='location' 
and ydzdn_terms.name like '%" . $_GET["keyword"] . "%' 
ORDER BY ydzdn_terms.name ASC 
LIMIT 0,5";

它根据用户输入的内容和文本中任意位置的匹配来输出结果,因为我们最多只能显示 5 个结果。字符串长度总是较短的最重要的结果将被隐藏。 更清楚地说,我们的数据库是关于包含城市和州的位置和街道名称,例如: 南大街,维克森林,北卡罗来纳州

但我们也有城市名称本身,例如:wakeforest,NC

我希望当有人输入:唤醒森林时它会出现在列表顶部

我需要这个sql作为首先输出最短字符串或根据第一个字符的最相关性对结果进行排序的方式

sql mysql mysqli
1个回答
0
投票

请尝试以下查询(未经测试)。

$query = "
SELECT ydzdn_terms.term_id, ydzdn_terms.name 
FROM ydzdn_terms 
INNER JOIN ydzdn_term_taxonomy ON (ydzdn_terms.term_id = ydzdn_term_taxonomy.term_id) 
WHERE ydzdn_term_taxonomy.taxonomy = 'location' 
AND ydzdn_terms.name LIKE '%" . $_GET["keyword"] . "%' 
ORDER BY 
    LOCATE('" . $_GET["keyword"] . "', ydzdn_terms.name), 
    LENGTH(ydzdn_terms.name) ASC 
LIMIT 0, 5";

问候,

© www.soinside.com 2019 - 2024. All rights reserved.