我遇到了一个SQL查询,这几天一直困扰着我。我希望你们能帮助我!
我要为购物车创建发票。发票保存在两个表中。第一个表"ordre"包含有关用户的信息,发票是否已支付以及日期等。第二个表"ordreelementer"保存属于该发票的所有项目。
我的问题来了。我究竟如何获得打印发票所需的信息,其中包含有关客户的详细信息以及他/她购买的物品?我尝试了不同的SQL联接,但没有按预期工作。这里的任何帮助将不胜感激!我正在编写PHP代码并运行MySQL数据库。
这是我最新的 SQL 语句
$sql = "SELECT ordre.id,
ordre.uid,
ordre.dato,
ordre.status,
ordre.betalt,
ordre.navn,
ordre.adresse,
ordreelementer.oid,
ordreelementer.navn AS elnavn,
SUM(ordreelementer.ant * ordreelementer.stkpris) AS tot
FROM ordre
INNER JOIN ordreelementer
ON ordre.id=ordreelementer.oid
WHERE ordre.uid = ".brukerInfo('id')." AND ordre.id = ".$id."";
非常感谢所有帮助!
这将为您提供总订单的总和,并且您的订单元素将以逗号分隔值的形式出现。
SELECT ordre.id,
ordre.uid,
ordre.dato,
ordre.status,
ordre.betalt,
ordre.navn,
ordre.adresse,
ordre.id,
GROUP_CONCAT(ordreelementer.navn) AS elnavn,
SUM(ordreelementer.ant * ordreelementer.stkpris) AS tot
FROM ordre
INNER JOIN ordreelementer
ON ordre.id=ordreelementer.oid
WHERE ordre.uid = ".brukerInfo('id')." AND ordre.id = ".$id.""
GROUP BY ordre.id;
或者,您可以按订单元素 ID 对其进行分组,并使用 WITH ROLLUP 选项。 这将为每个元素提供单独的记录,并在最后为您生成一个总计行。
SELECT ordre.id,
ordre.uid,
ordre.dato,
ordre.status,
ordre.betalt,
ordre.navn,
ordre.adresse,
ordreelementer.oid,
ordreelementer.navn AS elnavn,
SUM(ordreelementer.ant * ordreelementer.stkpris) AS eltot
FROM ordre
INNER JOIN ordreelementer
ON ordre.id=ordreelementer.oid
WHERE ordre.uid = ".brukerInfo('id')." AND ordre.id = ".$id.""
GROUP BY ordereelementer.id WITH ROLLUP;
最后一个分组是一个伪组,因为每个组只有 1 个元素项。
由于您只是在填充发票,我的想法是将此查询分解为多个查询,除非您出于某种纯粹或实用的原因需要将其分解为一个查询。这将使您避免在结果集的每一行上复制所有这些ordre
信息的数据。无论如何,为了让您开始运行并打印发票,以下内容应该有效。
首先,从ordre
表中拉取一行中只需要的数据,即您的基本订单信息:
$sqlOrdreInfo = "SELECT ordre.id,
ordre.uid,
ordre.dato,
ordre.status,
ordre.betalt,
ordre.navn,
ordre.adresse
FROM ordre
WHERE ordre.uid = ".brukerInfo('id')." AND ordre.id = '.$id.'";
二、拉动个别订单线:
$sqlOrdreLines = "SELECT ordreelementer.oid,
ordreelementer.navn AS elnavn
FROM ordreelementer
WHERE ordreelementer.oid = '.$id.'";
第三,拉出你想要的金额:
$sqlOrdreTotal = "SELECT SUM(ordreelementer.ant * ordreelementer.stkpris) AS tot
FROM ordreelementer
WHERE ordreelementer.oid = '$id.'
GROUP BY ordreelementer.oid";
这将为您提供 3 个结果集,您可以轻松地在发票上打印所需的数据。
$sql = "SELECT ordre.id,
ordre.uid,
ordre.dato,
ordre.status,
ordre.betalt,
ordre.navn,
ordre.adresse,
ordreelementer.oid,
ordreelementer.navn AS elnavn,
ordreelementer.ant as val1,
ordreelementer.stkpris AS val2
FROM ordre
INNER JOIN ordreelementer
ON ordre.id=ordreelementer.oid
WHERE ordre.uid = ".brukerInfo('id')." AND ordre.id = ".$id."";
此查询返回所有值。现在,当您通过循环生成发票时,您必须计算总价值。