Seite 1 von 1

SQL: min und max bereiche summieren

Verfasst: 17.12.2009, 21:51
von nerd
Hallo,

ich habe eine tablelle mit pubs, und diese enthaelt auch die min- und max preise fuer drinks in dieser bar (und nur diese - keine indiviuellen preise). ich will die preise pro region in einem histogram oder bar chart darstellen um einen allgemeinen preisindex pro region zu darzustellen.

folgende werte mal angenommen:
bar1:
min:10, max:15
bar2:
min:12, max:20
bar3:
min:5, max:12

dann sollte mein histogram also 5-9 den wert 1 haben, 10-11 2, 12 3, 13-15 2 und 16-20 1.

kann mir einer einen tip geben wie ich das anstellen kann, nur in sql ohne die zahen in php zu verwursten...?

Verfasst:
von

Verfasst: 17.12.2009, 22:42
von w3news
dann sollte mein histogram also 5-9 den wert 1 haben, 10-11 2, 12 3, 13-15 2 und 16-20 1.
Mal abgesehen davon, dass ich diesen Satz 3- mal lesen musste, wirst du da nicht um PHP herum kommen, wenn du mich fragst.

Verfasst: 17.12.2009, 23:05
von net(t)worker
wenn die bereiche im Vorfeld feststehen könnte man bei jedem Datensatz für jeden Bereich nen Boolschen wert per if erstellen und diese dann jeweils zählen... oder so ähnlich jedenfalls...

oder für jeden Bereich eine eigene SQL Abfrage, die eben nur die Werte für den jeweiligen Bereich zählt...

oder mit ner subquery...

oder mit ner stored procedure...

also PHP muss nicht unbedingt sein...

Verfasst: 18.12.2009, 01:45
von nerd
w3news hat geschrieben: Mal abgesehen davon, dass ich diesen Satz 3- mal lesen musste.
ich bin der naechste goethe oder shakespere - bei dehnen muss man die saetze auch immer mehrmals lesen bis man sie versteht :D

Verfasst: 18.12.2009, 23:08
von Stephan Zöllner
Wenn Du das ohne besonderen Code innerhalb von PHP lösen willst wird es etwas eng:

Dann brauchst Du für alle möglichen / in Frage kommenden Bereiche eine extra Abfrage oder eine stored Procedure, die den Job erledigt und rufst diese durch den entsprechenden PHP-Befehl ab.

Genaue Angaben sind ohne die SQL-DB-Struktur aber nicht möglich.

Die beste und flexibelste Lösung wäre eine SQL-Abfrage, der Du die entsprechenden Parameter mitgeben kannst. Wie Du das dann realisierst - ob die Abfrage auf PHP-Ebene zusamengesetzt wird - ob sie in der SQL-Datenbank als Trigger steht oder - ob Du ein Template dafür hernimmst ... ist dann gerade "Wurst" und hängt von Deinen Kenntnissen, Erfahrungen und Gewohnheiten ab ...

Verfasst: 19.12.2009, 18:09
von xAaron
Das Problem ist, dass du bestimmte Zahlen SQL untypisch nur virtuell hast. Du willst auch die 6 einbezogen haben, obwohl die nirgends gespeichert ist. Ob das trotzdem elegant mit den sql-Boardmitteln geht sehe ich zumindestens gerade nicht.
Was du machen kannst ist eine Unterabfrage, die eine größere Tabelle zurückgibt, wo für jeden Wert zwischen MIN und MAX eine eigene Zeile reserviert ist und die zugehörige Bar. Und aus diesem Ergebnis holst du dir dann die Anzahl Bars, die Preis 6, Preis 7, ... abdecken. Sieht allerdings nicht sehr effizient aus, aber vielleicht optimiert dein RDMS das gut.