【问题标题】:PHP Iterate through a MySQL result a certain amount of timesPHP 遍历 MySQL 结果一定次数
【发布时间】:2014-03-04 12:40:06
【问题描述】:

目前我有这段代码循环遍历查询的整个结果:

$result = mysqli_query($con, $sql);
$data = array();

while($row = mysqli_fetch_array($result)) { 

    $name      = $row ['name'];
    $desc      = $row ['description'];
    $cat       = $row ['category'];
    $price     = $row ['price'];
    $quantity  = $row ['quantity'];
    $id        = $row ['productID'];
    $image     = $row ['image'];

    $arr = array();

    $arr ["id"] = $id;
    $arr ["name"] = $name;
    $arr ["desc"] = $desc;
    $arr ["cat"] = $cat;
    $arr ["price"] = $price;
    $arr ["quantity"] = $quantity;
    $arr ["image"] = $image;

    array_push($data, $arr);

}
echo json_encode($data);

我想将其更改为仅循环遍历一组结果。我在代码的前面有一个变量,名为$amount,这是我想要的结果数量。

我听说我应该使用mysql_result() 和一个for 循环来计算$amount,但我不确定我现有的代码将如何使用该设置!请提出建议。

编辑:

@Styphon 指出我实际上不需要更改我的迭代代码来解决这个问题。只需在我的 SQL 查询中添加一个LIMIT

【问题讨论】:

  • 为什么不对查询添加限制?为什么你将 row 放入 var 然后 var 放入 array 然后 push 到 data 中?
  • 我对 MySQL 没有太多经验,请问这个怎么做?听起来它可以工作!
  • @benharris 看到我的回答

标签: php arrays json mysqli


【解决方案1】:
$sql = "rest of query...
LIMIT $amount"; //This will limit it to whatever is $amount. Just make sure to have it on the end of your query.
$result = mysqli_query($con, $sql);
$data = array();

while($row = mysqli_fetch_array($result)) { 

    $arr = array();
    $arr["id"] = $row['productID'];
    $arr["name"] = $row['name'];
    $arr["desc"] = $row['description'];
    $arr["cat"] = $row['category'];
    $arr["price"] = $row['price'];
    $arr["quantity"] = $row['quantity'];
    $arr["image"] = $row['image'];

    array_push($data, $arr);

}
echo json_encode($data);

【讨论】:

  • OP 表示有一个名为$amount 的变量反映了要处理的结果数量。所以你想要 `LIMIT $amount"; 作为查询中的最后一行,我相信。
【解决方案2】:

无论你使用 mysql_ 还是 mysqli_,解决方案都是一样的(但你应该使用 mysqli 甚至 pdo)。它是这样的:

$num = 0;
$amount = 10;

while ($f = mysql_fetch_array($q)) {
  // your code;
  $num++;
  if ($num==$amount) break;
}

正如你提到的 for 循环,使用 for 循环你可能会做这样的事情

for ($i=0;$i<$amount;$i++) {
  $f = mysql_fetch_array($q);
  //your code
}

显然你应该调整它以满足你的需要。

【讨论】:

  • 但是很明显,你应该使用 LIMIT,我以为你以前知道这一点。
  • Upvoting as "the answer to the question as ask":我听说我需要使用 for 循环并计数到 $amount - 这表明(尽管有 @987654323 @) 如何做到这一点。对未来访问者有用的信息-尽管(正如您所指出的)这不是最佳解决方案。
  • 既然你提到了它,mysql_fetch_* 确实会向前移动一个内部指针,所以简单的 for 循环可能会更简单。我会相应地编辑我的答案。
  • 当结果数少于$amount...时,您的新公式如何工作?你可以做for($i=0; $i&lt;$amount &amp;&amp; $f = mysql_fetch_array($q); $i++) {,但它开始变得越来越丑,越来越快。
  • 是的,我想到了,但还是写了。他应该自己想办法 :) 当没有获取任何东西时,他也可以从循环中中断,有选择,这取决于提出问题的人。
【解决方案3】:
SELECT * FROM tbl
LIMIT 0, $amount

这会将您的结果限制为 $amount。

【讨论】:

  • 所以LIMIT 0, $amount 只是在我的查询结束?
  • 嗯,这比我想象的要容易得多!谢谢!
猜你喜欢
  • 2015-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-12
  • 2012-06-05
相关资源
最近更新 更多