Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 限制输出的Mysql结果_Php_Html_Mysql_Arrays - Fatal编程技术网

Php 限制输出的Mysql结果

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

我在实现一些输出以回显来自数组的结果列表时遇到问题。 我想创建一个实时搜索引擎,通过使用AJAX的keyup函数来运行查询

当输出将针对表中列出的每个匹配进行回显时,一切正常。 现在我想合并所有重复的条目

代码如下:

$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>';
    }