子请求MySQL

子请求MySQL,mysql,sql,subquery,Mysql,Sql,Subquery,我尝试执行的子请求被阻止,但我就是不知道如何执行。 我有4张桌子: jos_vm_products=>存储的所有产品 jos_vm_order_items=>订单中的项目 jos_vm_order=>订单 stock\u web\u brut=>我的产品的库存 我想获得特定产品的所有信息: 库存数量(已完成) 表jos_vm_products(完成)中的产品信息 特定产品的“待定”订单数(已冻结) 这是我的第一个要求: SELECT `product_id` , `product_w

我尝试执行的子请求被阻止,但我就是不知道如何执行。 我有4张桌子:

  • jos_vm_products=>存储的所有产品
  • jos_vm_order_items=>订单中的项目
  • jos_vm_order=>订单
  • stock\u web\u brut=>我的产品的库存
我想获得特定产品的所有信息:

  • 库存数量(已完成)
  • 表jos_vm_products(完成)中的产品信息
  • 特定产品的“待定”订单数(已冻结)
这是我的第一个要求:

SELECT  `product_id` ,  `product_weight` ,  `cdate` ,  `mdate` ,  `product_name` ,  `product_sales` ,  `product_sku` ,  `product_in_stock` , SUM( stock_bloque ) AS  'stock_bloque', SUM( stock_total ) AS  'stock_total', SUM( stock_vente ) AS  'stock_vente', ref
FROM jos_vm_product t1
INNER JOIN  `stock_web_brut` t2 ON t1.product_sku LIKE CONCAT( t2.ref,  '%' ) 
GROUP BY product_id;
我想我应该做这样的子请求:

SELECT 

     (
        SELECT  COUNT(t5.product_id) 
        FROM jos_vm_product t5 
        INNER JOIN jos_vm_order_item t6 ON  t5.product_id = t6.product_id 
        WHERE order_status = 'P' AND t5.product_id = 12
     ) AS "nombre_produit_pending",  
    `product_id` ,  
    `product_weight` ,  
    `cdate` ,  `mdate` ,  
    `product_name` ,  
    `product_sales` ,  
    `product_sku` ,  
    `product_in_stock` , 
    SUM( stock_bloque ) AS  'stock_bloque', 
    SUM( stock_total ) AS  'stock_total', 
    SUM( stock_vente ) AS  'stock_vente', 
    ref
FROM jos_vm_product t1
INNER JOIN  `stock_web_brut` t2 ON t1.product_sku LIKE CONCAT( t2.ref,  '%' ) 
GROUP BY product_id
而不是«12»,我想我应该做一些类似的事情:

WHERE order_status = 'P' AND t5.product_id = t1.product_id
但我有一个循环

以下是表格:(我不能发布图片)

对于结果来说,应该是这样的:

`product_id` | [...] | 'number_of_orders_in_pending_for_this_product' |
    12       | [...] |               15
    13       | [...] |               5
    14       | [...] |               3
如果有人有主意


Kai23

在这种情况下,您使用的子选择有点错误。使用
左侧外部联接中的子选择,如下所示:

SELECT 
    `nombre_produit_pending`.`count`
    `product_id` ,  
    `product_weight` ,  
    `cdate` ,  `mdate` ,  
    `product_name` ,  
    `product_sales` ,  
    `product_sku` ,  
    `product_in_stock` , 
    SUM( stock_bloque ) AS  'stock_bloque', 
    SUM( stock_total ) AS  'stock_total', 
    SUM( stock_vente ) AS  'stock_vente', 
    ref
FROM jos_vm_product t1
INNER JOIN  `stock_web_brut` t2 ON t1.product_sku LIKE CONCAT( t2.ref,  '%' ) 
LEFT OUTER JOIN (select count(t5.product_id) as count, t5.product_id as pid FROM jos_vm_product t5 
        INNER JOIN jos_vm_order_item t6 ON t5.product_id = t6.product_id 
        WHERE order_status = 'P'
     ) AS nombre_produit_pending ON nombre_produit_pending.pid = t1.product_id    
GROUP BY product_id
PS!我没有检查您的数据库结构和查询,我只是按照不同的顺序复制了您自己的查询,因此如果您从mysql中得到任何错误,我可以帮助您将其排序:)


关键是,子选择应该查询所有未决订单并按ID对它们进行分组(返回值为2:
ID
count
),因此您可以将子结果与其ID连接起来,并将相应的计数作为一个值

多亏了tiit,这里是最后的请求:

SELECT 
`nombre_produit_pending`.`count`,
`product_id` ,  
`product_weight` ,  
`cdate` ,  `mdate` ,  
`product_name` ,  
`product_sales` ,  
`product_sku` ,  
`product_in_stock` , 
SUM( stock_bloque ) AS  'stock_bloque', 
SUM( stock_total ) AS  'stock_total', 
SUM( stock_vente ) AS  'stock_vente', 
ref
FROM jos_vm_product t1
INNER JOIN  `stock_web_brut` t2 ON t1.product_sku LIKE CONCAT( t2.ref,  '%' ) 
LEFT OUTER JOIN (SELECT COUNT(t5.product_id) AS count, t5.product_id AS pid FROM         jos_vm_product t5 
    INNER JOIN jos_vm_order_item t6 ON t5.product_id = t6.product_id 
    WHERE order_status = 'P'
    GROUP BY t5.product_id
 ) AS nombre_produit_pending ON nombre_produit_pending.pid = t1.product_id    
GROUP BY product_id

你能提供你的桌子结构吗?另外,您的预期结果是什么?您好,这里有一个完整表格的链接:对于结果,它类似于:
product\u id
,[…]“stock\u total”,“stock\u vente”,“此产品的订单数量”我很高兴您能让它工作:)如果有帮助,请将此帖子标记为解决方案。