繁体   English   中英

从存储的结果中查询多行

[英]querying multiple rows from stored results

我会尽力解释这种情况,但是我对php和mysql还是相当陌生,所以有点生疏。

我试图达到的具体目的是查询导致回购了客户购买的“代码”。

我的问题在于,当一个客户订购的商品多于一件商品时,每个客户都得到一个订单号(在示例中为1081),该订单号链接到order_list db,该数据库列出了他们购买了哪些产品。 因此,在此示例中,1081订购了3种产品(1、11、14),在数据库中显示为。

od_id  |  pd_id
----------------
1081   |  1
1081   |  11
1081   |  14

因此,当我成功查询1081时,它将带回3行结果。 对于此示例和数量查询而言,这很好,但是当我需要所有三个结果时,我在最终的sql查询中只返回了一个结果。

到目前为止,这是我的测试代码:

//Get order IDS
$sqlid = "SELECT pd_id FROM tbl_order_item WHERE od_id = 1081";
$result = mysql_query($sqlid);

if (!$result) {
$message  = 'Invalid query: ' . mysql_error() . "\n";
$message .= 'Whole query: ' . $sqlid;
die($message);
}

while($row = mysql_fetch_assoc($result)) {
$ids[] = $row['pd_id'];
}

foreach ($ids as $id) {
echo $id . "<br />";
}

//Get order Qtys
$sqlqty = "SELECT od_qty FROM tbl_order_item WHERE od_id = 1081";
$result = mysql_query($sqlqty);

if (!$result) {
$message  = 'Invalid query: ' . mysql_error() . "\n";
$message .= 'Whole query: ' . $sqlqty;
die($message);
}

while($row = mysql_fetch_assoc($result)) {
$qtys[] = $row['od_qty'];
}

foreach ($qtys as $qty) {
echo $qty . "<br />";
}

//Get Order Codes
$sqlcode = "SELECT od_code FROM tbl_order_code WHERE pd_id = $id LIMIT $qty";
$result = mysql_query($sqlcode);

if (!$result) {
$message  = 'Invalid query: ' . mysql_error() . "\n";
$message .= 'Whole query: ' . $sqlcode;
die($message);
}

while($row = mysql_fetch_assoc($result)) {
$codes[] = $row['od_code'];
} 

foreach ($codes as $code) {
echo $code . "<br />";
}

页面上的当前结果是这样的:

1   //Three results from "pd_id" (What the customer ordered)
11  //
14  //
1   //Three results from "od_qty" (How many the customer ordered
1   //
2   //
YYXY-YYXY-YYXY-YYXW   //The first code result with two codes as there was 2 qty for product 14
YYXY-YYXY-YYXY-YYXX   //

我的测试页,您可以在此处查看以上内容。

我希望我有道理,基本上我需要最终的“ $ sqlcode”查询来处理上一个查询中的所有行,而不仅仅是第一个。

谢谢!

Key:
pd_id //product id
tbl_order_item //ordered items table
od_id //order id 
od_qty //quantity of each product
od_code //order codes
tbl_order_code //codes table each code is related to the pd_id 

将最后一个sql包装在foreach中,以便对每个$ id执行

您应该真正阅读sql join,因为可以像$ sql stmt一样完成整个脚本

foreach ($ids as $id) {

$sqlcode = "SELECT od_code FROM tbl_order_code WHERE pd_id = $id LIMIT $qty";
$result = mysql_query($sqlcode);

if (!$result) {
$message  = 'Invalid query: ' . mysql_error() . "\n";
$message .= 'Whole query: ' . $sqlcode;
die($message);
}

while($row = mysql_fetch_assoc($result)) {
$codes[] = $row['od_code'];
} 

}

这是尝试通过联接执行此操作(如果有帮助的话)

// query data
$order_id = 1081;

$sql = "SELECT tbl_order_item.pd_id, tbl_order_item.od_qty, tbl_order_code.od_code FROM tbl_order_item JOIN tbl_order_code ON 
tbl_order_code.pd_id=tbl_order_item.pd_id
WHERE tbl_order__item.od_id = $order_id";

$result = mysql_query($sql);

if (!$result) {
$message  = 'Invalid query: ' . mysql_error() . "\n";
$message .= 'Whole query: ' . $sql;
die($message);
}


while($row = mysql_fetch_assoc($result)) {
    printf("Order ID: %s - Product ID: %s - Qty: %s - Code: %s<br />", $order_id, $row['pd_id'], $row['od_qty'], $row['od_code']);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM