【问题标题】:Mysql result to limit outputMysql结果限制输出
【发布时间】:2013-04-16 10:41:22
【问题描述】:

我在实现某些输出以回显来自数组的结果列表时遇到问题。 我想创建一个实时搜索引擎,使用 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

非常感谢。

【问题讨论】:

  • 什么是abc
  • 你好,对不起。 a 是 zpicode,b 是城市。我更新了代码。谢谢

标签: php html mysql arrays


【解决方案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 = ...”中的所有行替换到最后应该可以。试一试,因为有时应该考虑问题之前的步骤。

问候

芦苇

【讨论】:

  • 好吧,我不得不解决一些问题,但总的来说效果很好。非常感谢您的帮助。祝你有美好的一天。
  • 不客气,如果您对代码有任何疑问以便理解,请发布它们。
【解决方案2】:

首先,您的语句将只返回 1 行与 New York,并且列 counter 将有 2。Chicago 丢失了,因为 counter 只有 1。 所以我认为你的结果看起来像: 有 1 个结果! 12345纽约

如果您想要“3 个结果”,只需执行 2 个查询,一个查询行数(只需省略 group 和 having 子句,也不要询问 a 和 b)。 所以你得到输出: 有 3 个结果!

接下来,您必须省略获取所有行(也包括没有重复行的行)的 having 子句。你可以这样写: echo ($row["a"].' '.$row["b"].($row["counter"] > 1 ? " (".$row["counter"]."x)" : " ")

我希望这会有所帮助。

问候

帕拉斯克斯

【讨论】:

  • 你好,对不起,我没有贴出真实的代码。结果将以正确的方式显示和计数。我将表格编辑为 NEW 而不是 NEW YORK。所以这不是问题。问题只是显示和限制重复项的方式。
  • 嗨,bonny,现在我有点困惑。您有两个不同的结果($query 中的所有行和 $check 中的所有重复行),但您没有使用带有重复项的那个。我认为获得这两个结果并将它们组合起来有点复杂(两个很多获取彼此的正确行)。通过使用 "SELECT a, b, COUNT(*) counter FROM table WHERE $where GROUP BY a, b" 你应该在一行中拥有所有你需要的东西(总行数除外)并且可以使用最后一个我在回答中给出的声明。还是我错过了重要的一点?问候,帕拉斯克斯
  • 您好,感谢您的回答。你的权利。 $duplicate 目前不使用。我无法触摸第一个查询,因为它仍在工作,并计算所有结果。因此最好添加第二个查找重复项的查询。我已经尝试使用 foreach 循环来处理这个问题,但我仍然卡住了。主要目标应该是这样的:如果 $result !== 0 然后查看是否存在重复的 foreach 结果。如果有重复则只列出一次结果并在后面加上重复的数量,如果没有重复则列出一次结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-22
  • 1970-01-01
  • 1970-01-01
  • 2016-10-14
  • 2018-04-08
  • 1970-01-01
  • 2017-03-17
相关资源
最近更新 更多