【发布时间】:2014-09-09 00:04:51
【问题描述】:
我有一个包含预期列的地址表(公寓、房屋、街道、邮政编码、国家等)。
我正在使用 PHP 从表单输入 ($street) 执行 MySQL 搜索。我已经成功做到了,所以我可以通过所有道路拼写变体(例如:'street'、'st'、'st.')进行搜索,如下所示。我希望输出数组按街道分组。以下按每个单独的拼写分组。有没有办法让我的返回组包含所有拼写变体?
我的代码
<?php
$results = $db->prepare(
"SELECT * FROM entries
WHERE
street = :street
OR street = REPLACE(:street, 'st', 'street')
OR street = REPLACE(:street, 'st.', 'street')
OR street = REPLACE(:street, 'st.', 'st')
OR street = REPLACE(:street, 'street', 'st')
OR street = REPLACE(:street, 'street', 'st.')
GROUP BY street, house
")
$results->bindParam(':street', $street);
$results->execute();
$output = $results->fetchAll(PDO::FETCH_ASSOC);
return $output;
?>
当前示例输出
[1] Church Street
[1] 12 Church Street
[2] 25 Church Street
[2] Church St.
[1] 19 Church St.
所需的示例输出
[1] Church Street
[1] 12 Church Street
[2] 25 Church Street
[3] 19 Church St.
【问题讨论】:
-
这条街叫“圣奥古斯丁街”是什么?它将成为“奥古斯丁街”。
-
很好看。这是搜索,不是输入,所以搜索不存在的东西不是问题:)
-
在没有任何聚合函数的情况下,您使用 GROUP BY 子句是不合适的
-
@Strawberry我是新手,但我认为你不需要在MySQL中分组之前进行聚合?dev.mysql.com/doc/refman/5.0/en/group-by-extensions.html
-
你这样做,因为否则你(可能)返回无意义的结果。这里有一些非常有经验的用户主张在与此类似的情况下使用它——它已经展示了微小的性能优势——但我认为它太容易被滥用。