Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL-Hilfe:So finden Sie alle Bestellungen eines Kunden bis Preis <=20 und Status='unbezahlt'

Fast GENAU selbe Frage hier beantwortet . Die Prämisse ist, dass Sie eine weitere Spalte benötigen würden, um als laufende Summe für den betreffenden Kunden zu dienen...

Ich habe Tabellen- und Simulationsdaten genau wie Ihre Ergebnisse erstellt und bin zu IHREN genauen Ergebnissen gekommen ... Das Problem war irgendwie, dass MySQL die Kriterien ZWEIMAL pro Zeile anwendete und nicht verstand, wie oder warum ... Ich vermute STARK, dass es sich um einen Fehler handelt. kann es aber nicht beschreiben. Wie auch immer, ich habe einen Fix, der eine innere "PreQuery" als Grundlage erzwingt und ALLE Datensätze daraus mit @SQLVars zurückgibt und dann eine WHERE-Klausel daraus anwendet ...

select properSummed.*
   from 
      ( select
              o.orderid, 
              o.price, 
              @RunningTotal := @RunningTotal + o.price as UnpaidSoFar
           from
              orders o, 
              (select @RunningTotal := 0 ) sqlvars
           where o.ownerid = 1
             and o.paymentstatus = 'unpaid' ) properSummed
    where 
       properSummed.UnpaidSoFar <= 50