Php 限制输出的Mysql结果
我在实现一些输出以回显来自数组的结果列表时遇到问题。 我想创建一个实时搜索引擎,通过使用AJAX的keyup函数来运行查询 当输出将针对表中列出的每个匹配进行回显时,一切正常。 现在我想合并所有重复的条目 代码如下:Php 限制输出的Mysql结果,php,html,mysql,arrays,Php,Html,Mysql,Arrays,我在实现一些输出以回显来自数组的结果列表时遇到问题。 我想创建一个实时搜索引擎,通过使用AJAX的keyup函数来运行查询 当输出将针对表中列出的每个匹配进行回显时,一切正常。 现在我想合并所有重复的条目 代码如下: $search_term = $_POST['search_term']; $where = ""; $search_term = preg_split('/[\s]+/', $search_term, -1, PREG_SPLIT_NO_EMPTY); $total_sear
$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 (2x)
56789 Chicago
因此,该表为:
a | b
12345 New
12345 New
56789 Chicago
非常感谢。首先,您的对账单将只返回纽约的1行,列计数器将返回2行。芝加哥是失踪的,因为柜台只有1个。 所以我认为你的结果是: 有1个结果! 12345纽约 如果您想让“3results”jsut执行两个查询,一个查询行数(只需省略group和having子句,也不要要求a和b)。 所以你得到了输出: 有3个结果 接下来,您必须省略having子句来获取所有行(以及那些没有重复的行)。你可以这样写: echo($row[“a”]。。$row[“b”]。($row[“counter”]>1?”(“$row[“counter”].”x)”:“”) 我希望这有帮助 问候
Paracus我想到了这样的事情:
$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>';
}
$query=$db->query(“从`table`WHERE.$WHERE.'GROUP BY a,b)中选择a,b,COUNT(*)计数器”);
$result=$query->num\u行;
如果($result!==0){
$resultSizeQuery=$db->query(“从`table`WHERE.$WHERE'中选择计数(*)计数器”);
$resultSize=$resultSizeQuery->fetch_assoc();
回显“有“$resultSize[“counter”]”结果! ;
而($row=$query->fetch\u assoc()){
回显“”.$row[“a”]。“$row[“b”];
echo($row[“counter”]>1?(“$row[“counter”].”x):”);
回音“ ”;
}
}否则{
回显“没有结果! ”;
}
替换从“$duplicates=…”到结尾的所有行应该可以完成它的工作。请尝试一下,因为有时问题之前的步骤应该仔细考虑
问候
Paracus什么是
a
,b
,c
?您好,对不起。a是zpicode,b是city。我更新了代码。谢谢Shello,对不起,我没有发布真实代码。结果将以正确的方式显示和计数。我将表格编辑为NEW,而不是NEW YORK。所以这不是问题。问题只是解决方法显示和限制重复项。嗨,bonny,现在我有点困惑。您有两个不同的结果(所有行在$query中,所有行在$check中都有重复项),但您没有将其中一个与重复项一起使用。我认为获取这两个结果并将它们组合起来有点复杂(两个多行取回彼此的正确行).通过使用“从表中选择a,b,COUNT(*)计数器
其中$WHERE GROUP By a,b”,您应该在一行中拥有所需的所有内容(除了总行数)我可以使用我在回答中给出的最后一句话。或者我遗漏了一个重要的问题吗?您好,parascushello,谢谢您的回答。您的权利。$duplicate目前未使用。我无法触摸第一个查询,因为它仍在工作,并统计所有结果。因此,最好添加第二个查询,以查找重复项。我想dy尝试使用foreach循环来处理这个问题,但我仍然坚持。主要目标应该是:如果$result!==0,那么看看是否有重复的foreach结果。如果有重复的结果,那么只列出一次结果,并在后面加上重复的数量,如果没有重复的结果,则只列出一次。好的,我必须解决一点b总之,这一切都很好。非常感谢你的帮助。祝你有愉快的一天。不客气。如果你对代码有任何疑问,请发表。
$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>';
}