Mysql结果限制输出

时间:2013-04-16 10:41:22

标签: php html mysql arrays

我在实现某些输出以回显来自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

非常感谢。

2 个答案:

答案 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