兩個 while 循環好嗎?有更好的寫法嗎?

发布于 2022-09-07 15:53:47 字数 775 浏览 8 评论 0

  <? while($row = mysqli_fetch_array($data)){ ?>
           
                <?
                $product_data = $pdo->query(
                  "SELECT DISTINCT p.prod_id, p.icon FROM product AS p
                  JOIN product_order AS po ON p.prod_id = po.prod_id
                  JOIN user_order AS uo ON po.order_id = '{$row['order_id']}' AND uo.id = '{$_SESSION['user-id']}' "
                );
                while ($product_row = mysqli_fetch_array($product_data)){ ?>
                  <img class="" src="<?=$product_row['icon'];?>">
                <? }?>
              <?=$row['order_id'];?>
          <?}?>

問題一
這樣的 兩個 while 大神有什麼其他好的寫法嗎?
我已經思路死
總覺得哪裡怪怪的?
有大神有其他更好的寫法可以分享嗎?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

歌枕肩 2022-09-14 15:53:47

一次子查询即可

"SELECT DISTINCT p.prod_id, p.icon FROM product AS p
                  JOIN product_order AS po ON p.prod_id = po.prod_id
                  JOIN user_order AS uo ON 
                  po.order_id in (select order_id from PRODUCTTABLENAME) 
                  AND 
                  uo.id in (select user_id from PRODUCTTABLENAME)"

这样一次查询结果就出来了,然后遍历输出PRODUCTTABLENAME为你第一个循环查询的表

蓝眼睛不忧郁 2022-09-14 15:53:47

外部循环是一个列表,内部循环是这个列表中取出一个项目作为条件的列表,这种情况建议先做两次查询,然后做内存关联处理。

<? 

$order_list = [];
while($row = mysqli_fetch_array($data)){ 
    $order_list[] = $row;
}

$product_data = $pdo->query(
                  "SELECT DISTINCT p.prod_id, p.icon FROM product AS p
                  JOIN product_order AS po ON p.prod_id = po.prod_id
                  JOIN user_order AS uo AND uo.id = '{$_SESSION['user-id']}' "
                );
$sub_order_list=[];
while($row = mysqli_fetch_array($product_data)){ 
    $sub_order_list[] = $row;
}

$order_map = [];


foreach($order_list as &$val){
    print_r($val);
    $order_map[$val['order_id']]=&$val;
}

foreach($sub_order_list as &$val){
    $order=&$order_map[$val['order_id']];
    if(isset($order['children'])){
        $order['children'][]=$val;
    }else{
        $order['children']=[$val];
    }
}

foreach($order_list as $val){
   print_r($val);
}
就是爱搞怪 2022-09-14 15:53:47

奇怪,昨天晚上明明在手机上回答了呢。谢邀。你这个需求是需要根据某个表里面的某个值进行查询另一个表的数据以获取到详细的相关信息,这里你可以考虑用联表查询,你可以自己去了解下 mysql 的 join 操作。建议先去了解然后再参考我提供的 sql 好些。

<?php

$sql = ' select tOne.order_id as tOrder_id,tOne.user-id as tUser_id,po.*,uo.* select tableName tOne left join product_order as po on po.order_id = tOne.order_id left join user_order as uo on uo.id = tOne.user-id ';

$data = $pdo -> query($sql);
$html = '';
while($row = mysqli_fetch_array($data)){
    $html .= '<img class="" src="'.$row['icon'].'">';
}

echo $html;

啊,仔细看了下才发现原来你已经用了 join ,那为什么不多用一重呢?昨天用手机看,因为你代码的写法,看着很痛苦所以就没详细看了代码。
最后希望以上内容对你有帮助。

誰ツ都不明白 2022-09-14 15:53:47

用mysql连表查询,不要循环查询,很慢

汐鸠 2022-09-14 15:53:47

楼上正解,对数据库的操作不要放在循环语句中,表的关联查询最好在循环外部就做好。而且你这里好像是使用了框架了是吗?我记得YII框架中有“<?=$row['order_id'];?>”这样的写法,用框架的话,对MVC的划分还是挺清晰的

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文