基数违规:1242子查询返回更多>超过1行

时间:2015-05-05 16:51:54

标签: php mysql pdo group-by left-join

我在库存系统中工作,需要在仓库中显示所有产品,每个产品的存在都显示为每个产品存在的结果(存在)(在表PRODUCTOS ,我在每个产品的条形码编号中使用GROUP BY)减去每个产品的商品销售(cantidad)的结果(在表VENTAS

该协议代码的一部分:

$existe = $row['existe'];
$vendidos = $row['cantidad'];
$tExiste = $existe - $vendidos;

问题是,当表格VENTAS 在每个条目中显示多个具有相同代码的产品时...当它只显示一个产品代码或名称时,列表会显示结果我需要。

我在表格中看到了问题VENTAS 我添加了另一个与该表中已有产品的销售

  

致命错误:带有消息的未捕获异常'PDOException'   'SQLSTATE [21000]:基数违规:1242子查询返回更多   超过1行(63):PDO->查询('SELECT F.foto,...')#1 {main}抛出   第63行/xxxxx/productos.php

我的两张表中有两个问题:

  • 第一个PRODUCTOS表: enter image description here

  • VENTAS TABLE: enter image description here

这里是代码:

    $sql = "SELECT F.foto, P.id_p, P.cod, P.nombreProd, P.cat, P.subcat, 
    SUM(P.existencia) AS existe, P.vineta, P.dnm, P.compra, P.venta, P.f_vencimiento,
    P.alert_cantidad, P.descuento1, P.descuento2, SUM(V.cantidad) AS cantidad, 
    (SELECT foto FROM FOTOSP WHERE codF = cod)
    AS foto, (SELECT cantidad FROM VENTAS WHERE codV = cod)
    AS CANTIDAD FROM PRODUCTOS P
    LEFT JOIN FOTOSP F ON  P.cod = F.codF 
    LEFT JOIN VENTAS V ON  P.cod = V.codV 
GROUP BY cod ORDER BY id_p DESC";
    $result = $conn->query($sql);     // HERE IS THE LINE 63
    while($row = $result->fetch(PDO::FETCH_ASSOC)) {
    $existe = $row['existe'];
    $vendidos = $row['cantidad'];
    $tExiste = $existe - $vendidos;

这是表体的一部分:

<td><?php echo $row['cod']; ?></td>
<td><?php echo $row['nombreProd']; ?></td>
<td><?php echo $tExiste; ?></td>     // HERE NEED TO SHOW THE RESULT OF THE SUBTRACT
<td><?php echo $row['compra']; ?></td>
<td><?php echo $row['venta']; ?></td>

修改

当我在子选择中添加GROUP BY codV时,错误消失了

(SELECT cantidad FROM VENTAS WHERE codV = cod GROUP BY codV) AS CANTIDAD

但问题是产品不止一次......而不是使减法(35 - 18 = 17)显示52 ...... ???

显然它将35乘以2并且它们会减去。

 35 * 2 = 70 //  the existence in table PRODUCTOS IS 35 NOT 70 (35*2), why is multiplying itself?
-18 = 52 // 18 is the result of SUM(13+5) because are two times in the table 

表VENTAS中的其他产品也是SUM数量(cantidad)

24 -  // the existence in table PRODUCTOS
10+10 = 4  // the quantity sold is 10 and in the table is only one time...not 20(10+10)

0 个答案:

没有答案