Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 基数冲突:1242子查询返回的行数大于1行_Php_Mysql_Pdo_Group By_Left Join - Fatal编程技术网

Php 基数冲突:1242子查询返回的行数大于1行

Php 基数冲突:1242子查询返回的行数大于1行,php,mysql,pdo,group-by,left-join,Php,Mysql,Pdo,Group By,Left Join,我在一个库存系统中工作,需要显示仓库中的所有产品,每个产品的存在性显示为表PRODUCTOS中每个产品存在性的总和的结果,我在cod中使用GROUP BY,它是每个产品的条形码编号减去表VENTAS中每个产品sellcantidad之和的结果 减法程序代码的一部分: $existe = $row['existe']; $vendidos = $row['cantidad']; $tExiste = $existe - $vendidos; 问题在于,VENTAS表中的每个条目中显示了多个具有相

我在一个库存系统中工作,需要显示仓库中的所有产品,每个产品的存在性显示为表PRODUCTOS中每个产品存在性的总和的结果,我在cod中使用GROUP BY,它是每个产品的条形码编号减去表VENTAS中每个产品sellcantidad之和的结果

减法程序代码的一部分:

$existe = $row['existe'];
$vendidos = $row['cantidad'];
$tExiste = $existe - $vendidos;
问题在于,VENTAS表中的每个条目中显示了多个具有相同代码的产品。。。。当只显示一个产品代码或名称时,列表表会显示所需的结果

当我在VENTAS表中添加另一个已在该表中销售的产品时,我看到了这个问题

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

从我的两张表格中捕获两个问题:

第一个PRODUCTOS表:

文塔斯表:

代码如下:

    $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>
但问题在于产品不止一次…而不是让减法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中的另一个乘积也是QuantityCandiad的和

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)

这个错误是完全正确的。在查询中使用的是subselect,它只能返回一行和一个值。在您的情况下,它返回一个值,但返回该值的多行。请尝试将限制设置为1subquery@BeingSunny问题是,我需要证明所有产品的存在……而不仅仅是从VENTAS选择的一个SUMcantidad,其中codV=cod可能很慢。@MarcB是的,但是,我如何解决这个问题,查询向我显示了所有真实存在的结果,并减去这两行sumexistincia-SUMcantidad
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)