Mysql 分组联接查询结果
我正在尝试编写一个查询,显示所有订单及其选项。到目前为止已经完成了,但是当我尝试按订单id对它们进行分组时,它只为每个选项打印一行,而不是订单id及其下的所有选项 我遗漏了一些东西,但不知道是什么:) 这是我的Mysql 分组联接查询结果,mysql,join,group-by,Mysql,Join,Group By,我正在尝试编写一个查询,显示所有订单及其选项。到目前为止已经完成了,但是当我尝试按订单id对它们进行分组时,它只为每个选项打印一行,而不是订单id及其下的所有选项 我遗漏了一些东西,但不知道是什么:) 这是我的 $sql = 'SELECT * FROM `order` RIGHT JOIN `order_option` on order.order_id=order_option.order_id where order_status_id =
$sql = 'SELECT *
FROM `order` RIGHT JOIN `order_option`
on order.order_id=order_option.order_id
where order_status_id = 2
group by order_option.order_option_id';
$retval = mysql_query( $sql, $conn );
if(! $retval )
{
die('Could not get data: ' . mysql_error());
}
while($row = mysql_fetch_array($retval, MYSQL_ASSOC))
{
print "ID:{$row['order_id']} <br> ".
"OPTION NAME: {$row['name']} <br> ".
"VALUE: {$row['value']} <br> ".
"--------------------------------<br>";
}
echo "Fetched data successfully\n";
mysql_close($conn);
?>
**UPDATE 1**
您应该改为按订单id分组,并使用
GROUP\u CONCAT
在同一行中获取订单的所有选项:
SELECT
o.order_id,
GROUP_CONCAT(oo.order_option_id SEPARATOR ',') AS Options
FROM `order` AS o
RIGHT JOIN `order_option` AS oo on o.order_id = oo.order_id
where o.order_status_id = 2
group by o.order_id;
如果GROUP\u CONCAT
不是您想要的,那么您必须使用其他聚合函数,但不要在SELECT
子句中包含任何不在groupby
子句中且没有聚合函数的列。否则您将得到不一致的数据
更新1 查询不起作用的原因:
SELECT
o.order_id,
o.name,
o.value,
GROUP_CONCAT(o.order_id SEPARATOR ',') AS Options
FROM order_option AS o
LEFT JOIN order AS oo on o.order_id = oo.order_id
where oo.order_status_id = 2
group by o.order_id
由于SELECT
子句中的两列o.name,o.value
既不在聚合函数中,也不在GROUP BY
子句中,因此这两列的值不一致,MySQL会为它们获取任意值。请尝试以下方法:
SELECT
o.order_id,
o.name,
o.value,
GROUP_CONCAT(o.order_id SEPARATOR ',') AS Options
FROM order_option AS o
LEFT JOIN order AS oo on o.order_id = oo.order_id
where oo.order_status_id = 2
group by o.order_id,
o.name,
o.value;
我可以数一数,我见过(知道自己在做什么的人)在两只手的手指上使用右连接的次数。对于每个右连接,显然都有一个逻辑上相同的左连接,因为左连接更直观,我们倾向于使用它们。其次,查询中的任何位置都没有聚合函数,因此GROUP BY无法执行您认为它正在执行的任何操作!这正是我想要的我想。。。但是无法将其分组到代码的“while{”部分。我丢失了something@largan-请更新您的代码,并说明它是如何工作的。这是我的代码$sql=“选择o.order\U id、o.name、o.value、GROUP\U CONCAT(o.order\U id分隔符’,”作为o.order\u选项的选项,$result=mysql\u查询($sql);while($row=mysql\u获取assoc($result)){$id=$row['order\u id'];$name=$row['name'];$value=$row['value'];print“$id name:$name:$value.”;打印“
--------------
”;}这是结果ID 29名称:option1,值:39问题是每个ID都有option2,并且不会显示
SELECT
o.order_id,
o.name,
o.value,
GROUP_CONCAT(o.order_id SEPARATOR ',') AS Options
FROM order_option AS o
LEFT JOIN order AS oo on o.order_id = oo.order_id
where oo.order_status_id = 2
group by o.order_id,
o.name,
o.value;