我在实现某些输出以回显来自Array的结果列表时遇到问题。 我想创建一个Live搜索引擎,通过使用AJAX在keyup-function的帮助下运行查询。
当表中列出的每个匹配都会回显输出时,一切正常。 现在我想结合所有重复的条目。
代码如下:
$search_term = $_POST['search_term'];
$where = "";
$search_term = preg_split('/[\s]+/', $search_term, -1, PREG_SPLIT_NO_EMPTY);
$total_search_terms = count($search_term);
$total_search_term = 0;
foreach ($search_term as $key=>$value) {
$total_search_term = $total_search_term + 1;
if ($total_search_term === 1){
if (is_numeric($value) ){
$where .= "(`a` LIKE '%$value%')";
} else {
$where .= "(`b` LIKE '%$value%')";
}
}else if ($total_search_term > 1){
$where .= " AND ";
if (is_numeric($value) ){
$where .= "(`a` LIKE '%$value%')";
} else {
$where .= "(`b` LIKE '%$value%')";
}
}
}
$duplicate = $db->query("SELECT a, b, COUNT(*) counter
FROM `table`
GROUP BY a, b
HAVING COUNT(*) > 1
");
$check = $duplicate->fetch_assoc();
$query = $db->query("SELECT a, b FROM table WHERE $where");
$result = $query->num_rows;
if ($result !== 0 ){
echo '<li id="hit">There are $result results!</li>';
while ($row = $query->fetch_assoc() ) {
echo '<li>',
$row["a"],
' ',
$row["b"],
'</li>';
}
} else {
echo '<li id="hit">no result!</li>';
}
举一个输出的例子:
There are 3 results!
12345 New
12345 New
56789 Chicago
那就是它应该如何:
There are 3 results!
12345 New (2x)
56789 Chicago
所以表格是:
a | b
12345 New
12345 New
56789 Chicago
非常感谢。
答案 0 :(得分:1)
我想到了这样的事情:
$query = $db->query("SELECT a, b, COUNT(*) counter FROM `table` WHERE ".$where." GROUP BY a, b");
$result = $query->num_rows;
if ($result !== 0 ){
$resultSizeQuery = $db->query("SELECT COUNT(*) counter FROM `table` WHERE ".$where);
$resultSize = $resultSizeQuery->fetch_assoc();
echo '<li id="hit">There are '.$resultSize["counter"].' results!</li>';
while ($row = $query->fetch_assoc() ) {
echo '<li>'.$row["a"].' '.$row["b"];
echo ($row["counter"] > 1 ? " (".$row["counter"]."x)" : "");
echo '</li>';
}
} else {
echo '<li id="hit">no result!</li>';
}
将所有行替换为“$ duplicates = ...”到最后它应该可以正常工作。试试吧,因为有时候应该考虑问题之前的步骤。
问候
parascus
答案 1 :(得分:0)
首先,你的陈述将只返回纽约的一行,而列计数器将有2.芝加哥缺失,因为计数器只有1。 所以我认为你的结果如下: Ther是1结果! 12345纽约
如果你想要“3个结果”jsut做2个查询,一个用于行数(只是省略了组和有条款,也不要求a和b)。 所以你得到了输出: 有3个结果!
接下来,您必须省略获取所有行的having子句(也包括没有重复的行)。你可以这样写: echo($ row [“a”]。''。$ row [“b”]。($ row [“counter”]&gt; 1?“(”。$ row [“counter”]。“x)”: “”)
我希望这会有所帮助。
此致
Parascus