【发布时间】:2015-12-20 14:30:53
【问题描述】:
(这篇文章可能会很长,但请耐心等待并帮助我找到解决方案)
我有一个包含各种参数的产品表,主要参数是它的大小和成本。每个产品尺寸分为小、中、大三部分,其成本也根据产品的尺寸进一步分为三部分。为此,我创建了另一个表 productsize,其中包含每个产品的尺寸和成本。
prodsize 表的小视图是
我有另一个桌子购物车,它保存着用户订购的那些产品的价值
购物车表小视图
现在我希望合并这两个表,并创建一个数组来显示每个尺寸的尺寸以及用户为特定产品的每个尺寸订购的数量。为此,我编写了下面的代码
$sql = "SELECT catname,GROUP_CONCAT(prodsize) as sizes,GROUP_CONCAT(cost) as price,prodname,prodimg,catid,productid FROM productsize where catid='".$catid."' group by productid";
$result = mysqli_query($con, $sql);
if (mysqli_num_rows($result) > 0)
{
while($row = mysqli_fetch_assoc($result))
{
$pid=$row['productid'];
$rows['catname'] = $row['catname'];
$rows['sizes'] = $row['sizes'];
$rows['price'] = $row['price'];
$rows['prodname'] = $row['prodname'];
$rows['prodimg'] = $row['prodimg'];
$rows['catid'] = $row['catid'];
$rows['productid'] = $row['productid'];
$user_sql = "SELECT group_concat(prodsize) as purchased_size,group_concat(quantity) as purchased_quantity,catid,userid FROM `cart` where userid='$userid' and catid='$catid' and productid='$pid'";
$user_result = mysqli_query($con, $user_sql);
if (mysqli_num_rows($user_result) > 0)
{
while($user_row = mysqli_fetch_assoc($user_result))
{
$rows['purchased_size'] = $user_row['purchased_size'];
$rows['purchased_quantity'] = $user_row['purchased_quantity'];
$rows['userid'] = $user_row['userid'];
}
}
$post_rows[]=$rows;
}
echo "<pre>";
print_r($post_rows);
echo "</pre>";
}
我通过 print_r($post_rows) 得到的数组是
Array
(
[0] => Array
(
[catname] => Main Course
[sizes] => small,medium,large
[price] => 130,170,200
[prodname] => pies
[prodimg] =>
[catid] => 2
[productid] => 13
[purchased_size] => small,large
[purchased_quantity] => 1,1
[userid] => 1
)
[1] => Array
(
[catname] => Main Course
[sizes] => small,medium,large
[price] => 50,90,110
[prodname] => Squash
[prodimg] =>
[catid] => 2
[productid] => 14
[purchased_size] => medium
[purchased_quantity] => 1
[userid] => 1
)
[2] => Array
(
[catname] => Main Course
[sizes] => small,medium
[price] => 70,110
[prodname] => corns
[prodimg] =>
[catid] => 2
[productid] => 15
[purchased_size] =>
[purchased_quantity] =>
[userid] =>
)
)
现在我想要的更改在 [purchased_size] 和 [purchased_quantity] 中。我要那个
如果用户没有为特定产品购买任何东西,那么[purchased_size] 和[purchased_quantity] 中的值应该为 0,0,0,如果用户购买了一种尺寸的产品,如 Squash 的情况,用户选择中等那么 [purchased_size] 和 [purchased_quantity] 中的其他值应该为 0,0,如果他订购了 2 个尺寸,则 [purchased_size] 和 [purchased_quantity] 中的第三个值应该为 0
所以新数组应该看起来像下面给出的数组(IMP 点,大小和成本的顺序应该是固定的,即小、中、大)
Array
(
[0] => Array
(
[catname] => Main Course
[sizes] => small,medium,large
[price] => 130,170,200
[prodname] => pies
[prodimg] =>
[catid] => 2
[productid] => 13
[purchased_size] => small,0,large
[purchased_quantity] => 1,0,1
[userid] => 1
)
[1] => Array
(
[catname] => Main Course
[sizes] => small,medium,large
[price] => 50,90,110
[prodname] => Squash
[prodimg] =>
[catid] => 2
[productid] => 14
[purchased_size] => 0,medium,0
[purchased_quantity] => 0,1,0
[userid] => 1
)
[2] => Array
(
[catname] => Main Course
[sizes] => small,medium
[price] => 70,110
[prodname] => corns
[prodimg] =>
[catid] => 2
[productid] => 15
[purchased_size] => 0,0,0
[purchased_quantity] => 0,0,0
[userid] =>
)
)
【问题讨论】:
-
我只是不知道你为什么首先使用 GROUP_CONCAT() 。直接在 PHP 中处理非聚合数组似乎更容易
-
@Strawberry 能否请您提出一种我可以使用的方法
标签: php mysql sql arrays multidimensional-array