【问题标题】:How to limit search results while using foreach and while loops如何在使用 foreach 和 while 循环时限制搜索结果
【发布时间】:2015-06-02 22:50:23
【问题描述】:

以下代码运行良好,但我找不到限制结果数量的方法。请问有什么想法吗?

    $q = "some keywords for search"; // always escape
    $keys = explode( " ",$q );
    $query = "SELECT * FROM table WHERE para LIKE '%$q%' ";

    foreach($keys as $k)
    {
        $query .= " OR para LIKE '%$k%'";
    }

    $result = $mysqli->query($query);

    while( $row = $result->fetch_assoc()) 
    {
       if ($row != 0) { 
       $title = $row['title'];
    }
    }

感谢您的帮助。

注意:$q 保存搜索关键字,然后代码将其分解,搜索关键字分两步: 1- 使用 ($q as it is) 作为一个句子。 2-它在爆炸 $q 后将每个关键字作为数组搜索(这是“foreach”所做的部分)。 之后,代码使用“while”循环查找与搜索请求匹配的所有结果。

【问题讨论】:

  • $query .= " OR para LIKE '%$k%' LIMIT x_number"; 这就是它的去处,而不是第一部分。您还缺少一个右大括号。
  • 我应该删除那个^
  • @Fred-ii- 是的,你是对的,当我此时使用“limit”时,代码运行良好,因为它在数据库中找到了关键字,但如果它没有找到任何关键字其中,我收到以下错误:致命错误:调用 fetch_assoc() 行中布尔值上的成员函数 fetch_assoc()
  • 我更正了代码,非常感谢:)
  • 是的,我看到了,很棒。不客气。

标签: php mysql mysqli foreach while-loop


【解决方案1】:

在完成查询后使用 LIMIT。

另外,如果您想获得按表中某些字段排序的结果,您也可以说“ORDER BY fieldname ASC|DESC”

如下:

$q = "some keywords for search"; // always escape
$keys = explode( " ",$q );
$query = "SELECT * FROM table WHERE para LIKE '%$q%' ";

foreach($keys as $k)
{
    $query .= " OR para LIKE '%$k%'";
}

$query .= " LIMIT 10"; //<<<<<<<<<<<<<<<    

$result = $mysqli->query($query);

while( $row = $result->fetch_assoc()) 
{
   if ($row != 0) { 
   $title = $row['title'];
}

【讨论】:

  • 哇,你做到了。非常感谢:)
【解决方案2】:

您可以限制 MySQL 查询中的结果数量,如下所示:

$query = "SELECT * FROM table WHERE para LIKE '%$q%' LIMIT 5";

这会将其限制为 5 个结果。如果要 10,请将其更改为 10

【讨论】:

    【解决方案3】:

    使用限制。

    SELECT * FROM table WHERE para LIKE '%$q%' LIMIT 2
    

    【讨论】:

    • 我试过了,但没有成功,因为查询被分成了 3 个部分。
    猜你喜欢
    • 1970-01-01
    • 2014-12-05
    • 2016-01-28
    • 1970-01-01
    • 2016-02-15
    • 1970-01-01
    • 2016-03-20
    • 1970-01-01
    • 2012-09-24
    相关资源
    最近更新 更多