Chris Hunter
hallo zusammen,
ich stehe grad vor einem kleinen problem:
Ich habe eine tabelle wo aufträge drinstehen. Also quasi gibt es da Vertriebspartner die reichen aufträge ein und sind in verscheidenen gebieten tätig. Das ganze seiht so aus:
ID
Vertriebspartner
Region
Auftragswert
Jedsmal wenn ein VP ein Auftrag einreicht wird dieser mit auftragswert und VP-ID in die o.a. tabelle geschrieben.
z.B.
1, 1,süd,1000
2,1,süd,2000
3,2,nord,500
4,3,west,1000
jetzt suche ich ein Querys das mir die Region ausgibt in der die wenigsten Aufträge eingereicht wurden.
bei o.g. beispiel müsste dann irgendwie die region ost ausgegeben werden.
die region ist ein enum feld. ist das möglich?
daHooligan
| code: |
1:
|
$array['sued']=mysql_query("SELECT * FROM tabelle WHERE region='sued' ",$dbh); |
|
für alle regionen und dann die anzahl der returnten Datensätze auswerten...
Ist zwar recht rudimentär aber why not?
wie läuft htw?
Chris Hunter
ja das würde ich zum jetzingen zeitpunkt auch machen. aber sind ziemlich viele regionen. ist in postleitzahlengebeite aufgeteilt also ca. 100 gebiete das suckt wenn ich das so mache...
HTW hat grad ne derbe kriese...ich könnt verückt werden. musst nurmal im forum lesenunter HTW-talk... total krass was da grad abgeht...
daHooligan
jaja, kaum ist man weg gehts den bach runter
achso, ich hab gedacht es wären wirklich nur die vier gegenden.
eine möglichkeit wäre es, zu jeder ID die Gegend auszulesen und das dann in nem array hochzuzählen, ich weiß aber nicht wie das deine DB belastet
Chris Hunter
mmh ich werds wohl so machen das ich ne zweite tabelle nehme und bei jedem insert dort n counter pro gebiet hochzähle... dann kann ich selecten mit nem order by
schmola33
so sollte es gehen:
[SELECT distinct(ORT) FROM TABELLE] gibt dir die verschiedenen orte in deiner tabelle aus
[SELECT count(distinct(ORT)) FROM TABELLE] gibt dir die anzahl dieser aus
wenn du das jetzt noch mit einer anderen spalte kombinierst, z.b. ID kommt das raus was du willst:
[SELECT count(distinct(ID)),ORT from TABELLE group by ORT]
... und dann noch sortieren damit das auch gleich gemacht ist und fertig!
[SELECT count(distinct(ID)),ORT from TABELLE group by ORT order by ID asc]
Chris Hunter
ok das ist recht geil klappt wunderbar...
jetzt noch eine stufe schlimmer.
man stelle sich vor in der tabelle ist noch ein enum feld (gs).
untervertrieb
und
hauptvertrieb
was ist wennich jetzt nur die aufträge des hauptvertriebs haben möchte?
zu zeit sieht es so aus:
SELECT count(distinct(id)) as cnt_all, area FROM orders GROUP BY area ORDER BY cnt_all ASC
schmola33
woher weißt du ob es ein untervertrieb ist oder ein hauptvertrieb ist?
aus deinem ersten Beitrag nehmen ich mal an dass du ein spalte hast die für den vertrieb verwendest.
steht dort lediglich 'Hauptvertrieb' oder 'Untervertrieb' drinnen?
dann erweitere deine derzeitige mysql anfrage doch einfach um "... WHERE vertrieb = 'hauptvertrieb'; "
doch da ich das nicht wirklich annehme probier folgendes:
suche dir zuerst die vertriebe heraus die du brauchst und erweiter dann die anfrage um eine dementsprechende where bedingung - ungefähr so:
| php: |
1:
2:
3:
4:
5:
6:
7:
8:
|
<?php ...
$todo = "SELECT count(distinct(id)) as cnt_all, area FROM orders GROUP BY area ORDER BY cnt_all ASC WHERE";
foreach ($benötigtevertriebe => $value) {
$todo .= " vertieb = '".$value."' OR";
}
$todo .= " 1=1"; /* dies ist nur ein schönheitsfehler weil ich zu faul bin um das letzte " OR" nicht so alleine
dastehen zu lassen, bzw wenn $benötigtevertriebe leer ist auch kein fehler kommt*/
... ?> |
|
Chris Hunter
ja danke. war aber ne scheiß frage von mir. ist alles bestens, hat geklappt. danke...