将PHP foreach循环与SQL foreach循环相结合

时间:2013-05-02 05:00:23

标签: php sql loops foreach

正向:

我已经通过Stack Overflow上类似措辞的问题进行了检查,但没有一个是针对我尝试的内容。

我拥有的:

我有会话数据,两个循环和一个SQL表。

  1. 第一个循环检查特定的现有会话数据和用途 这些数据的键(而不是值)来确定什么id 应该从表中选择(SQL)。
  2. 第二个循环逐行输出SQL结果。
  3. ......这也可以用不那么抽象和友好的方式来描述:

    1. 第一个循环查找当前添加到购物车的商品 (key = product id,value = quantity)确定哪些产品 应列在"您的订单"页。
    2. 第二个循环列出与每个产品ID关联的数据行 例如标题,描述和单位成本。
    3. 我需要什么:

      由于我的会话数据包含产品ID(键)和相应的数量(值),我需要将数量显示为每个输出行的一部分。

      id                | title         | description   | unit cost     | amount             | subtotal
      session data key  | from database | from database | from database | session data value | basic PHP math
      (also in database)                                                                       (unit cost * amount)
      

      我的代码:

      使用会话数据键查询require产品的第一个循环:

      $id_from_session = "WHERE id = '9999999999'"; //fix due to not being sure how to simuataneously incorporate "WHERE" and "OR" into query loop (only looping the "OR" condition).
      
      foreach($_SESSION['post'] as $key=>$value)
          {       
              $id_from_session .= "OR id ='".$key."'";
          } 
      

      输出查询结果行的第二个循环:

      foreach ( $yourorders as $yourorder ) 
          {
          ?>
              <?php echo $yourorder->title; ?></br>
              <?php echo $yourorder->description; ?></br>
              <?php echo $yourorder->value; ?></br>
              <?php /* I NEED THE QUANTITY HERE */ ?></br>
              <?php /* VALUE * QUANTITY HERE */ ?></br>
          <?php
          }
      <?php /* OVERALL TOTAL OUTSIDE OF LOOP */ ?></br>
      

      我的问题:

      如何将会话数据循环中的数量(以及数量*单位值)合并到SQL结果循环中?

2 个答案:

答案 0 :(得分:2)

$_SESSION['post'][$yourorder->id] 

应该让你的数量合适吗?所以,

<?php echo $_SESSION['post'][$yourorder->id]; ?>

或者是否允许使用短标签

<?= $_SESSION['post'][$yourorder->id]; ?> 

另一种构建WHERE字符串的更好方法。

$where = array();
foreach($_SESSION['post'] as $key=>$value)
{       
    $where[] = "id ='".$key."'";
} 

$id_from_session = "WHERE " . implode(' OR ', $where);

答案 1 :(得分:0)

$ _ SESSION ['post'] [$ yourorder-&gt; id]为您提供数量,因为密钥是产品ID:)

嗯..如果您可以绝对确定您的购物车钥匙不需要转义,您可以写下:

$id_from_session = "WHERE id IN ('" . implode( "', '", array_keys($_SESSION['post']) ) . "')";