【问题标题】:MySQL - ORDER BY CASE WHEN doesn't workMySQL - 按案例排序不起作用
【发布时间】:2015-12-29 12:50:25
【问题描述】:

我有一个包含两列 (id,full_name) 的表“用户”我使用 PHP 创建了一个搜索框之后我搜索了如何按相关性排序我找到了解决方案但它无法正常工作所以如果有三个包含全名 John Smith 的行,那么它只给我一个结果,这里是表格

 id  |   full_name
 1   |   John Smith
 2   |   John Smith
 3   |   John Smith

这是我的代码

$find = $_GET['q'];
$values=explode(" ", $find);
$sql="SELECT * FROM users WHERE";
$i=0;
foreach($values as $v)
{
$v=trim($v);
if($i==0)
{
$sql.=" full_name LIKE '%$v%'";
}
else
{
$sql.=" OR full_name LIKE '%$v%'";
}

$i++;
}
$sql.="GROUP BY full_name ORDER BY CASE WHEN full_name like '$find %' THEN 0
           WHEN full_name like '$find%' THEN 1
           WHEN full_name like '% $find%' THEN 2
           ELSE 3
      END, full_name";
$query3 = mysql_query($sql) or die(mysql_error());
while ($row3 = mysql_fetch_array($query3)) {
echo $row3['full_name']."<br/>";
}

所以我的问题是,当我搜索 John 时,它只给我一个结果,即 John Smith 而我希望它给我

  • 约翰·史密斯
  • 约翰·史密斯
  • 约翰·史密斯

如果有任何帮助,我将不胜感激

【问题讨论】:

  • 现在你正在改变你的代码改变你使用的扩展。由于 mysql_* 自 PHP 5.5 起已弃用并从 PHP 7.0 中删除,请改用 mysqliPDO。而且您的代码对 SQL 注入开放,在处理用户输入时使用 prepared statements。请这样做,否则你会后悔的。
  • 感谢您的建议,我将立即在我的整个网站上进行操作

标签: php mysql search sql-order-by case


【解决方案1】:

删除GROUP BY full_name 它将John Smith 名称组合在一起。

【讨论】:

  • 非常感谢你拯救了我的一天
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多