php - 按首字母字母顺序对自动完成建议进行排序

标签 php mysql

我想按首字母字母顺序对自动完成建议进行排序。

现在看起来像这样:http://i.imgur.com/EevFyv2.png

如果我输入字母 C,我想显示这样的标签建议:

  • C
  • C++
  • 事件目录
  • 苹果脚本
  • 蓝衣

代码:

$text = $mysqli->real_escape_string($_GET['term']);

$query = "SELECT * FROM autocomplete WHERE name LIKE '%$text%' ORDER BY name ASC";
$result = $mysqli->query($query);
$json = '[';
$first = true;
while($row = $result->fetch_assoc())
{
    if (!$first) { $json .=  ','; } else { $first = false; }
    $json .= '{"value":"'.$row['name'].'"}';
}
$json .= ']';

echo $json;

我希望有人能提供帮助,在此先感谢。

最佳答案

你需要

SELECT * 
FROM autocomplete 
WHERE name LIKE '%$text%' 
ORDER BY (name LIKE '$text%') DESC, 
         name ASC

第一个 ORDER BY 子句是一个 bool 值,当名称以 $text 开头时为 1,否则为 0,因此当您排序时按照 DESC 的顺序,以 $text 开头的值将被移到列表的前面(那些只包含它的其他地方将被移到末尾)。然后第二个子句再次按字母顺序对两个“子列表”进行排序。

关于php - 按首字母字母顺序对自动完成建议进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29842531/

相关文章:

php - 适合数据库模型的 Laravel Eloquent 模型

php - 如何防止通过地址栏进行sql注入(inject)

mysql - 将引擎类型从 MyISAM 更改为 InnoDB

mysql - 如何在 JPA(而不是 JPQL)中选择实体的一部分?

php - Mysqli 和绑定(bind)多个值

php - 无法连接到数据库 "Fatal error: Call to undefind function mysqli_connect()"

php - 这些安全功能是否足够?

php - 为什么centos curl版本与php curl版本不同

php - 在laravel中添加引用外键的表时出现错误如何解决?

mysql - 每个子类域继承表中的完整性引用