Php 基数冲突:1242子查询返回的行数大于1行
我在一个库存系统中工作,需要显示仓库中的所有产品,每个产品的存在性显示为表PRODUCTOS中每个产品存在性的总和的结果,我在cod中使用GROUP BY,它是每个产品的条形码编号减去表VENTAS中每个产品sellcantidad之和的结果 减法程序代码的一部分: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表中的每个条目中显示了多个具有相
$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)