我需要使用第一个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的视包装尺寸而定。
有什么建议吗? 如果您需要更多信息来帮助,请询问。
由于
答案 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。