【发布时间】:2016-04-02 06:11:19
【问题描述】:
我的问题有点长,请多多包涵
我有 2 张桌子 productsize 和 cart。我已经加入了 2 个表并创建了一个数组,但是这个数组的一部分我没有正确获取数据。 productsize 表有 4 种尺寸的产品(小号、中号、大号、perpiece)。
我从 2 个表中得到的数组类似于下面的数组,这里的主要部分是在 4 个数组中:- 大小、成本、购买大小、购买数量 0 索引值应该为小保留,1 为中大号 2 个,单件 3 个。
Array
(
[0] => Array
(
[productid] => 1
[size] => Array
(
[0] => small //reserved for small
[1] => medium //reserved for medium
[2] => large //reserved for large
[3] => 0 //reserved for perpiece
)
[cost] => Array
(
[0] => 10 //reserved for small
[1] => 20 //reserved for medium
[2] => 30 //reserved for large
[3] => 0 //reserved for perpiece
)
[purchasedsize] => Array
(
[0] => small //reserved for small
[1] => 0 //reserved for medium
[2] => large //reserved for large
[3] => 0 //reserved for perpiece
)
[purchasedquantity] => Array
(
[0] => 2 //reserved for small
[1] => 0 //reserved for medium
[2] => 3 //reserved for large
[3] => 0 //reserved for perpiece
)
)
)
问题是这种定位对于数组大小和成本来说工作得很好,但是在购买大小,购买数量中,如果购物车有一个具有每件大小的产品,那么它会转移到索引值 0
数组变成下面这样,但是在购买大小和购买数量下,perpiece 应该是索引值 3
Array
(
[0] => Array
(
[productid] => 2
[size] => Array
(
[0] => 0
[1] => 0
[2] => 0
[3] => perpiece
)
[cost] => Array
(
[0] => 0
[1] => 0
[2] => 0
[3] => 40
)
[purchasedsize] => Array
(
[0] => perpiece
[1] => 0
[2] => 0
[3] => 0
)
[purchasedquantity] => Array
(
[0] => 1
[1] => 0
[2] => 0
[3] => 0
)
)
)
产品尺寸表
id productid prodsize cost
1 1 small 10
2 1 medium 20
3 1 large 30
4 2 perpiece 40
购物车表
id productid prodsize prodcost quantity
1 1 small 10 2
2 1 large 30 3
3 2 perpiece 40 1
我使用的代码是
$sql= "SELECT p.productid, GROUP_CONCAT(p.prodsize ORDER BY p.id ASC) as size, GROUP_CONCAT(p.cost ORDER BY p.id ASC) as cost, GROUP_CONCAT(c.prodsize,'-',c.quantity) as cart_details, GROUP_CONCAT(DISTINCT(c.userid)) as user_id FROM productsize p LEFT JOIN cart c ON(c.productid = p.productid AND p.prodsize = c.prodsize) GROUP BY p.productid ORDER BY user_id DESC, p.productid ASC";
$result = mysql_query($sql);
if (mysql_num_rows($result) > 0)
{
$i = 0;
while($row = mysql_fetch_assoc($result))
{
$rows[$i]['productid'] = $row['productid'];
$final_size = array_fill(0, 4, '0');
$final_cost = array_fill(0, 4, '0');
$size = explode(',', $row['size']);
$cost = explode(',', $row['cost']);
foreach($size as $k=>$sizecol) {
switch($sizecol) {
case 'Small':
$array_key = '0';
break;
case 'Medium':
$array_key = '1';
break;
case 'Large':
$array_key = '2';
break;
case 'Perpiece':
$array_key = '3';
break;
}
$final_size[$array_key] = $sizecol;
$final_cost[$array_key] = $cost[$k];
}
$cart_details = explode(',', $row['cart_details']);
$purchasedsize = array_fill(0, 4, '0');
$purchasedquantity = array_fill(0, 4, '0');
foreach($cart_details as $cart) {
if($cart != '') {
$details = explode('-', $cart);
$key = array_search($details[0], $size);
$purchasedsize[$key] = $details[0];
$purchasedquantity[$key] = $details[1];
}
}
$rows[$i]['size'] = $final_size;
$rows[$i]['cost'] = $final_cost;
$rows[$i]['purchasedsize'] = $purchasedsize;
$rows[$i]['purchasedquantity'] = $purchasedquantity;
$rows[$i]['userid'] = $row['user_id'];
$i++;
}
}
【问题讨论】:
-
能否提供表格定义(DDL)和使用的表格内容?
标签: php mysql sql arrays multidimensional-array