2016-05-31 7 views
-1

Ich habe 2 Tabellen, die ich zusammenführen möchte. Ich möchte alle Produkte mit ihrer entsprechenden Gesamtmenge und Gesamtmenge drucken.mysql query - Fehler zeigt mysql Ergebnisse mit inneren Join

Das ist was ich habe.

//Product Table 
productID productName 
    1    A 
    2    B 
    3    C 


//Order Record (This came from 2 tables that I have successfully merged) 
orderID  productID  quantity  amount 
    1   1    5   100 
    2   2    2   50 
    3   2    3   150    

ich diesen

productID  productName  totalQuantity  totalAmount 
    1    A     8    250 
    2    B     2    50 
    3    C     0    0  
//instead of 0 for total Quantity and total Amount, it shows 2 and 50 respectively. 

Hier tun möchte, ist meine PHP-Code. Es gibt die Daten für die ersten beiden Zeilen korrekt aus (Produkt A und B), aber wenn es zur letzten Zeile kommt (Produkt C), kopiert es die Daten für Produkt B. Bitte sagen Sie mir, was in meinem Code falsch ist? Vielen Dank im Voraus.

Antwort

0

Ich glaube nicht, dass Ihre Abfrage korrekt ist.

Ich sehe die Tabellennamen nicht. Versuchen Sie, es zu ändern:

Tauschen Sie tabellenname und andere Tabelle mit den Namen für Tabelle a und b aus.

1

Quick Fix ist (nur WHERE zu Ihrer Anfrage hinzugefügt werden):

$orders = $wpdb->get_results("SELECT 
     a.productID, 
     SUM(a.quantity) as totalQuantity, 
     SUM(a.amount) as totalSales 
     FROM a 
     INNER JOIN b 
     ON a.orderID = b.orderID 
     WHERE a.productID = $productID 
     GROUP BY productID"); 

Aber an Ihrem Fragmente suchen, ich glaube, Sie es vereinfachen können (ersetzen vollständige Fragment) zu:

$records = $wpdb->get_results("SELECT 
     p.productID, 
     p.productName, 
     COALESCE(SUM(a.quantity),0) as totalQuantity, 
     COALESCE(SUM(a.amount),0) as totalSales 
    FROM wp_products p 
    LEFT JOIN a 
    GROUP BY p.productID"); 
+0

Ich habe eine foreach-Schleife auf den Produkten gemacht, dann habe ich für jedes Produkt die Gesamtmenge und den Umsatz abgefragt. Ich habe diesen Code '$ orders = $ wpdb-> get_results verwendet (" SELECT table_a.productID, SUM (table_a.quantity) als totalQuantity, SUM (able_a.amount) als totalSales FROM table_a INNER JOINtabelle_b ON table_a.orderID = table_b.orderID GROUP BY productID ");' Ich erhalte die korrekten Werte außer für diejenigen, die 0 für totalQuantity und totalSales erhalten sollen. – user3383911

+0

Coalesce funktioniert nicht. Ich habe auch versucht, IFNULL und es funktioniert nicht so gut. – user3383911

+0

was meinst du mit * nicht funktioniert *? und es gibt weder 'able_a.amount' noch' table_a.quantity' noch 'table_a' in meinem Code. Versuchen Sie also, genauer zu sein und genaue Tabellennamen und Tabellenschemata anzugeben – Alex