使用一个sql查询的结果从另一个获取结果 - 在哪里放置moveNext

时间:2014-03-28 13:54:43

标签: php mysql sql

我需要使用第一个SQL查询的结果来填充第二个查询中使用的变量,但似乎总是从第二个查询得到错误的结果。

第一个查询是:

$povi_query = " SELECT products_options_values_id
                FROM orders_products_attributes
                WHERE orders_id = $ord_id";
$povi_result = $db->Execute($povi_query);

结果是50,40,40,34,12,与db中的数据相比是正确的

第二个查询是:

$sku_query = "SELECT  pas.sku, 
                      pas.products_attributes_ids, 
                      pa.products_attributes_id, 
                      pa.options_values_id, 
                      opa.products_options_values_id
              FROM  products_attributes_skus pas
                JOIN products_attributes pa
                  ON pas.products_attributes_ids = pa.products_attributes_id
                JOIN orders_products_attributes opa
                  ON pa.options_values_id = opa.products_options_values_id
              WHERE pas.products_id = $prod_id
                AND opa.orders_id = $ord_id
                AND opa.products_options_values_id = $povi";
$sku_result = $db->Execute($sku_query);

如果我在phpMyAdmin中运行此查询,用$ povi替换第一个查询中的答案,我每次都会得到正确的结果,但是当我一起运行它们时数据都是错误的。

实际文件中的代码布局如下:

// Begin SKU modification 2 of 3
$ord_id = $orderitems_result->fields['orders_id'];
$prod_id = $orderitems_result->fields['products_id'];   
$sku = '';  
$povi_query = " SELECT products_options_values_id
                FROM orders_products_attributes
                WHERE orders_id = $ord_id";
$povi_result = $db->Execute($povi_query);
while (!$povi_result->EOF){
  $povi = $povi_result->fields['products_options_values_id']; 

  echo '<pre>';
  print_r($povi);
  echo '</pre>';

  $sku_query = "SELECT  pas.sku, 
                        pas.products_attributes_ids, 
                        pa.products_attributes_id, 
                        pa.options_values_id, 
                        opa.products_options_values_id
                FROM  products_attributes_skus pas
                  JOIN products_attributes pa
                    ON pas.products_attributes_ids = pa.products_attributes_id
                  JOIN orders_products_attributes opa
                    ON pa.options_values_id = opa.products_options_values_id
                WHERE pas.products_id = $prod_id
                  AND opa.orders_id = $ord_id
                  AND opa.products_options_values_id = $povi";
  $sku_result = $db->Execute($sku_query);

  echo '<pre>';
  print_r($sku);
  echo '</pre>';

  $povi_result->MoveNext();
}

我已经尝试更改while和MoveNext位置,也为第二个查询添加了一个,但所有实现的是query1的第一个结果和来自query2的第一个结果的永不结束列表或更多类似于我的结果不得不强迫这个过程结束。

我应该补充一点,它必须取50的第一个结果然后运行第二个查询,然后取第二个结果40并再次运行第二个查询。如果它需要一个50 40 40 34 12的数组,那么第二个查询将给出不正确的结果,因为它现在正在做,因为34还将返回匹配pas.products_id = $ prod_id和opa.orders_id = $ ord_id的数据,因为该产品有多个sku的视包装尺寸而定。

有什么建议吗? 如果您需要更多信息来帮助,请询问。

由于

1 个答案:

答案 0 :(得分:0)

尝试使用此查询替换两个查询:

$sku_query = "SELECT  pas.sku, 
                      pas.products_attributes_ids, 
                      pa.products_attributes_id, 
                      pa.options_values_id, 
                      opa.products_options_values_id,
                      pas.products_id
              FROM  products_attributes_skus pas
                JOIN products_attributes pa
                  ON pas.products_attributes_ids = pa.products_attributes_id
                JOIN orders_products_attributes opa
                  ON pa.options_values_id = opa.products_options_values_id
              WHERE opa.orders_id = $ord_id
              GROUP BY  pas.sku, 
                        pas.products_attributes_ids, 
                        pa.products_attributes_id, 
                        pa.options_values_id, 
                        opa.products_options_values_id,
                        pas.products_id";

GROUP BY是必要的,因为products_options_values_id的某些值在products_options_values_id表中多次出现,并且它产生了重复的行。以下是我的查询的SQLFiddle