2016-04-28 3 views
1

Ich muss wissen, ob es möglich ist, ein Ergebnis von INNER JOIN zu kombinieren, ohne doppelte Werte zu erhalten. Hier ist mein Problem:Kombinieren von redundanten Zeilen in INNER JOIN MySQL

I 2 Tabellen haben:

product 
product_id, product_name, image 

product_price 
product_id, selling_price, mrp 

Wenn ich beide kombinieren die Tabelle INNER JOIN mit erhalte ich die Ergebnisse kombiniert, wie erwartet:

Für die Abfrage:

SELECT `product`.`product_id`, `product`.`product_name`, `product`.`image`, 
     `product_price`.`selling_price`, `product_price`.`mrp` 
FROM `product` 
INNER JOIN product_price ON `product.product_id` = `product_price.product_id` 

Wie erwartet das funktioniert gut und ich bekomme das Ergebnis (vardump() php):

array (size=2) 
    0 => 
    array (size=6) 
     'product_id' => string '8' (length=1) 
     'product_name' => string 'product1' (length=8) 
     'image' => string '587d0e605fb52ed571f80a9e9d0d4cea.png' (length=36) 
     'selling_price' => string '100' (length=3) 
     'mrp' => string '110' (length=3) 
    1 => 
    array (size=6) 
     'product_id' => string '8' (length=1) 
     'product_name' => string 'product1' (length=8) 
     'image' => string '587d0e605fb52ed571f80a9e9d0d4cea.png' (length=36) 
     'selling_price' => string '200' (length=3) 
     'mrp' => string '220' (length=3) 

Nun, wie Sie die beiden Zeilen enthalten wiederholt product_id sehen können, product_name, Bildspalten, dachte ich, wenn es eine Möglichkeit gäbe, diese Redundanz und einige, was das Ergebnis zu erhalten zu vermeiden wie:

array (size=6) 
      'product_id' => string '8' (length=1) 
      'product_name' => string 'product1' (length=8) 
      'image' => string '587d0e605fb52ed571f80a9e9d0d4cea.png' (length=36) 
array (size=2) 
0 => 
      'selling_price' => string '100' (length=3) 
      'mrp' => string '110' (length=3) 

1 => 
     'selling_price' => string '200' (length=3) 
     'mrp' => string '220' (length=3) 

Dank , -Sreejith

+0

Ja. Dies ist eine einfache Array-Manipulation (von eindimensional zu multidimensional). – Strawberry

+0

Verwenden Sie distinct oder Gruppe von –

+0

@Strawberry Ich möchte es auf MySQL getan, ich weiß, ich kann es über PHP tun, aber ich suchte, wenn ich es durch Abfrage verwenden könnte :) –

Antwort

0

In MySQL und tatsächlich in allen relationalen Datenbank-Management-Systemen ist das Ergebnis jeder Abfrage eine rechteckige Tabelle aus Zeilen und Spalten. Wie Sie wissen, kommt es wie folgt aus:

product_id product_name image  selling_price mrp 
     8   product1  xxx.png  100   110 
     8   product1  xxx.png  200   220 
     9   product2  aaa.png  17   18 
     9   product2  aaa.png  22   24 

Sie fragen, ob MySQL eine Datenstruktur eher wie dieses erzeugen kann:

product_id product_name image  selling_price mrp 
     8   product1  xxx.png  100   110 
              200   220 

     9   product2  aaa.png  17   18 
              22   24 

mit Aufzählungen für jede einzelne Produkt. Die Antwort ist Nein, nicht mit nur einer Abfrage.

Sie können die Produkttabelle abfragen und dann für jedes Element in der Produkttabelle die Preistabelle abfragen. Das würde die gewünschte Datenstruktur ergeben. Aber das ist sehr ineffizient - es tut zu viele Abfragen.

Sie können eine einzelne Abfrage verwenden und ORDER BY verwenden, um sicherzustellen, dass die Ergebnisse jedes Produkts in aufeinanderfolgenden Zeilen in der Ergebnismenge enthalten sind. Dann könnten Sie in Ihrem Anwendungsprogramm diese aufeinanderfolgenden identischen Zeilen erkennen.

Berichterstellungssysteme wie Crystal Reports, Jasper oder BIRT können diese rechteckigen Ergebnismengen gut in ansprechend gestaltete Layouts umwandeln.

+0

Also wenn ich eine No-SQL Datenbank wie MongoDB verwende dann mag das aber nicht auf MySQL wie richtig ??? –

+0

Das stimmt. SQL behandelt in Tabellen. –