gpt4 book ai didi

php - 为什么我的容器 while 循环只循环第一个项目?

转载 作者:行者123 更新时间:2023-11-29 08:47:25 25 4
gpt4 key购买 nike

// current session id
$sid = session_id();

// get current cart session
$sql = "SELECT * FROM tbl_cart WHERE ct_session_id = '$sid'";
$result = dbQuery($sql);

// get all the items in the car category
$query = "SELECT pd_id FROM tbl_product WHERE cat_id ='28'";
$r = dbQuery($query);

//Cycle through the cart and compare each cart item to the cars to determine
if the cart contains a car in it.
while($cart = dbFetchAssoc($result)){
while($product = dbFetchAssoc($r)){
echo $cart['pd_id'] . " - ";
echo $product['pd_id']. "<br>";
}
}

dbFetchAssoc() 是一个自定义数据库层,基本上是 (mysql_fetch_assoc)。

我尝试从查询中获取行并使用该信息进行比较。上面带有 echo 语句的代码只是为了调试目的而进行回显。 while 循环在嵌套循环之后退出是否有特殊原因?

最佳答案

是的。您需要再次运行查询,因为每次调用 dbFetchAssoc($r) 时您都会前进该光标。

$sql = "SELECT * FROM tbl_cart WHERE ct_session_id =  '$sid'";
$result = dbQuery($sql);

// get all the items in the car category
$query = "SELECT pd_id FROM tbl_product WHERE cat_id ='28'";

while($cart = dbFetchAssoc($result)){
$r = dbQuery($query);
while($product = dbFetchAssoc($r)){
echo $cart['pd_id'] . " - ";
echo $product['pd_id']. "<br>";
}
}

这是一个优化版本,不会对数据库造成太大影响。不过,它是针对这个特定问题的,如果查询集特别大,这将是一个同样糟糕的选择 - 它会遇到内存问题而不是速度问题。

$sql = "SELECT * FROM tbl_cart WHERE ct_session_id =  '$sid'";
$result = dbQuery($sql);

// get all the items in the car category
$query = "SELECT pd_id FROM tbl_product WHERE cat_id ='28'";
$r = dbQuery($query);

// cache the product results into an array
$products = Array();
while($product = dbFetchAssoc($r)){
$products[] = $product['pd_id']
}

while($cart = dbFetchAssoc($result)){
$index = 0;
while($product = dbFetchAssoc($r)){
echo $cart['pd_id'] . " - ";
echo $product[$index]. "<br>";
$index++;
}
}

我还没有测试过第二个代码,但是这个想法应该足够清晰了。

关于php - 为什么我的容器 while 循环只循环第一个项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12218191/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com