| SQL / Datenbanken Probleme mit SQL? Hier könnt ihr eure Fragen zu SQL (MySQL, PostgreSQL, MS-SQL und andere ANSI-SQL Server) los werden. |
 |

28-07-2011, 23:49
|
|
mr_apollon
Registrierter Benutzer
|
|
Registriert seit: May 2009
Beiträge: 22
|
|
Eleganter Lösung für rechnen in MYSQL gesucht
Hallo Ihr Nachtschwärmer,
im Moment stehe ich wieder mal etwas auf dem Schlauch. Mit folgender Datenbankabfrage errechne ich offene Rechnungen. Läuft auch ganz gut, sieht mir nur zu gigantisch aus
Gibt es für den Query eine elegantere, performantere Lösung und wie bekomme ich es hin das Umsätze sum(summe) = 0 garnicht ausgegeben werden?

...und gute Nacht
Geändert von mr_apollon (28-08-2011 um 17:07 Uhr)
|

29-07-2011, 08:01
|
|
streuner
Registrierter Benutzer
|
|
Registriert seit: Aug 2009
Ort: Lüneburg
Beiträge: 461
|
|
Zitat:
|
und wie bekomme ich es hin das Umsätze sum(summe) = 0 garnicht ausgegeben werden?
|
...Bedingung in deine WHERE Bedingung packen (kleines tut dazu: http://www.techonthenet.com/sql/sum.php) oder evtl. IIF verwenden!
mfg streuner
__________________
Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert,
der letzte Netzknoten verkommerzialisert ist, werdet Ihr merken, dass Geld nicht von alleine programmiert.
"Diese Software verdient die 3 großen GGG: --- Gesehen --- Gelacht --- Gelöscht ---"
Geändert von streuner (29-07-2011 um 08:04 Uhr)
|

29-07-2011, 08:52
|
|
mr_apollon
Registrierter Benutzer
|
|
Registriert seit: May 2009
Beiträge: 22
|
|
Okay mit dem Where war klar  war nur in der Nacht nicht auf die Idee gekommen das nochmal zu verschachteln.
Hat jemand eine Idee wie man die ganze Abfrage performanter gestalten kann?
Geändert von mr_apollon (28-08-2011 um 17:07 Uhr)
|

29-07-2011, 08:54
|
|
streuner
Registrierter Benutzer
|
|
Registriert seit: Aug 2009
Ort: Lüneburg
Beiträge: 461
|
|
Statt den * die Spaltennamen schreiben, die Du brauchst  ! Dauert Dir die Abfrage zu lange, oder ist das ne allg. Frage, wie man das performanter machen kann??
mfg streuner
__________________
Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert,
der letzte Netzknoten verkommerzialisert ist, werdet Ihr merken, dass Geld nicht von alleine programmiert.
"Diese Software verdient die 3 großen GGG: --- Gesehen --- Gelacht --- Gelöscht ---"
|

29-07-2011, 09:01
|
|
mr_apollon
Registrierter Benutzer
|
|
Registriert seit: May 2009
Beiträge: 22
|
|
Im Moment habe ich nur eine Hand voll Testdaten, wo die Abfrage flott läuft. Irgendwie sieht mir die ganze Sache aber zu übertrieben aus.
|

29-07-2011, 09:15
|
|
streuner
Registrierter Benutzer
|
|
Registriert seit: Aug 2009
Ort: Lüneburg
Beiträge: 461
|
|
Na ja, du kannst doch auch deine 4 SELECT's die du mit UNION ALL verknüpfst, in 2 umwandeln - du hast das ja jeweils aufgesplittet! Ob das jetzt performanter ist...  ! Am besten wäre es, du hättest ne große Menge Daten um zu testen. Die Länge deines SQL Statements sagt nicht zwangsläufig was darüber aus, wie effizient gearbeitet wird!
mfg streuner
__________________
Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert,
der letzte Netzknoten verkommerzialisert ist, werdet Ihr merken, dass Geld nicht von alleine programmiert.
"Diese Software verdient die 3 großen GGG: --- Gesehen --- Gelacht --- Gelöscht ---"
|

29-07-2011, 09:26
|
|
mr_apollon
Registrierter Benutzer
|
|
Registriert seit: May 2009
Beiträge: 22
|
|
hmmm, ich glaube ich kann es nicht zusammenfassen, da ich ja jeweils das konto im datensatz brauche was > 9999 ist. sonst müsste ich über ein subselect wieder schauen ob konto oder gegenkonto >9999 ist
|

29-07-2011, 09:37
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.327
|
|
Was bedeutet diese Zahl überhaupt?
|

29-07-2011, 09:49
|
|
mr_apollon
Registrierter Benutzer
|
|
Registriert seit: May 2009
Beiträge: 22
|
|
durch die 2 spalten konto und gegenkonto wird eine buchung abgebildet. entweder ist es ein geschäftsvorgang (zahl < 10000) oder ein kunde (zahl > 9999). die kundennummer kann in abhängigkeit des saldo (s oder h) im konto oder im gegenkonto stehen. ich brauche nun die kundennummern mit zugehöriger rechnungsnummer die noch offen sind.
|

29-07-2011, 10:05
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.327
|
|
Das ist Pfusch. Ein Zahlenbereich darf keine Bedeutung haben. Leg eine zusätzliche Spalte an, die die Art des Datensatzes enthält (also ob es ein Geschäftsvorgang oder ein Kunde ist). Danach könnte man auch wunderbar gruppieren und die Abfrage sehr stark vereinfachen.
Geändert von h3ll (29-07-2011 um 10:10 Uhr)
|

29-07-2011, 12:12
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
Ich habe die Query nur überflogen, aber du selektierst immer über der gleichen Tabelle. Kann mir nicht vorstellen, dass das nicht auch mit geeigneten OR-Verknüpfungen zu machen ist. Dann wären die UNIONS schon mal weg - ob das schneller geht, verrät EXPLAIN.
Vielleicht kann man dann auch noch die beiden äußeren SELECTs eliminieren. Die hab ich mir jetzt noch nicht angesehen.
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|