Zwei Select Abfragen aus einer Tabelle verknüpfen und ausgeben

4 Antworten

mit $table, etc. meine ich,

, also "kleiner-zeichen table größer-Zeichen" . Mist editor!
  1. ich verstehe die SELECTs schon nicht: Soll tatsächlich neben der Artikel-Nr die Gesamtsumme über alle Artikel stehen? Es wird dann willkürlich die Nr des 1. Artikels angezeigt.

    Oder die Summe für jeden Artikel? dann sollte hinter jedem SELECT noch ein "Group BY artikel_nr".

  2. Willst du wirklich die beiden Abfragen mit SQL in eine Datenbank-Tabelle nebeneinander stellen? Ich habe selber ein wenig herumprobiert, aber das ist so kompliziert, wir lassens lieber:

in PHP merkst du dir die beiden suchergebnisse:

$res1 = mysql_query("select artikel_nr, sum(sale) as sum_sale from artikel where datum BETWEEN 2014-01-01 AND 2014-01-31 group by artikel_nr")
$res2 : analog

Dann werden die beiden Ergebnisse parallel ausgelesen und in eine HTML-Tabelle gestellt:

( wobei: $table = "

"; $tr = ""; $etr = ""; $td = ""; $etd = "";)
echo "$table";
while ( $row1 = mysql_fetch_assoc($res1) or  
 $row2 = mysql_fetch_assoc($res2) )
{   
  echo "$tr";
  if ( $row1 ) echo "$td$row1[artikel_nr]$etd$td$row1[sum_sale]$etd";
  if ( $row2 ) echo "$td$row2[sum_sale]$etd";
  echo "$etr";
}
echo "$etable";

Gruß, Max.

Hello there...

puh, es geht, ist aber aufgrund deiner Tabellenstruktur extrem bescheiden.....und kompliziert, aber folgende Lösung scheint bei mir das richtige Ergebnis zu liefern: Die Verkaufid ist bei mir einfach die Nummer des Verkaufs, weil ich glaube dass deine Tabelle so aufgebaut ist, dass bestimmte Artikel auch mehrmals verkauft wurden. Denk ich zumindest mal.

SELECT artikel.artikel_nr,
       Sum(zeitraum1.sale) AS `1. Aktionszeitraum`,
       Sum(zeitraum2.sale) AS `2. Aktionszeitraum`
FROM   artikel
       LEFT JOIN (SELECT *
                  FROM   artikel
                  WHERE  datum BETWEEN "2014-01-01" AND "2014-01-31") AS
                 zeitraum1
              ON artikel.verkaufid = zeitraum1.verkaufid
       LEFT JOIN (SELECT *
                  FROM   artikel
                  WHERE  datum BETWEEN "2014-01-01" AND "2014-05-31") AS
                 zeitraum2
              ON artikel.verkaufid = zeitraum2.verkaufid
GROUP  BY artikel_nr  

Hoffe das hilft dir weiter.

Grundsätzlich sollte man vermeiden, dass man das auf PHP abschiebt, da SQL schon schneller ist. Aber in deinem Fall das passende Statement zu finden, ist richtig richtig kniffelig, da man nicht unbedingt an sone Lösung denkt....... Vielleicht hätte man deine Datenbank auch geschickter aufbauen können. :O Evtl hätte man auch über Stored Procedures erstmal rausfinden können, welche Verkäufe im Aktionszeitraum waren. und diese mit nem Flag markieren können. Evtl sogar schon beim Verkauf selbst.

MfG

Alex

Was möchtest Du wissen?