1

やろうとしているサブリクエストがブロックされましたが、どうすればいいのかわかりません。私は4つのテーブルを持っています:

  • jos_vm_products => 保存されているすべての製品
  • jos_vm_order_items => 注文のアイテム
  • jos_vm_order => 注文
  • stock_web_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

しかし、私にはループがあります

ここに表があります: http://kai23.fr/myam.svg (画像を投稿できません)

結果については、次のようになります。

`product_id` | [...] | 'number_of_orders_in_pending_for_this_product' |
    12       | [...] |               15
    13       | [...] |               5
    14       | [...] |               3

誰かがアイデアを持っている場合。

カイ23

4

2 に答える 2

0

このコンテキストでは、サブセレクトを少し間違って使用しています。left outer join次のように、サブセレクトを使用します。

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 でグループ化する必要があることです (return:idととして 2 つの値を与えるcount)。そのため、サブ結果をその ID で結合し、それぞれのカウントを値として持つ必要があります。

于 2012-11-29T14:53:57.113 に答える
0

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
于 2012-11-29T17:42:17.543 に答える