mysql: Mitarbeiter abteilungsweise ausgeben
Norbert
- datenbank
Hallo,
Mein Problem ist:
Mit welchem Zusatz kann ich in meiner Query erreichen, dass unabhängig von sonstigen Sortierkriterien die Mitarbeiter IMMER abteilungsweise in der Ergebnisstabelle untereinander ausgegeben werden.
Also:
Ich sortiere nach Gehalt oder Eintrittsdatum, möchte aber die Abteilungen hierdurch nicht in der Ausgabe zerissen haben.
Hm.. besser kann ichs nicht formulieren :-)
Dank und Grüß ans Forum
Norbert
Hi,
Ich sortiere nach Gehalt oder Eintrittsdatum, möchte aber die Abteilungen hierdurch nicht in der Ausgabe zerissen haben.
Dann ist also die Abteilung dein erstes Sortierkriterium.
MfG ChrisB
Dann ist also die Abteilung dein erstes Sortierkriterium.
MfG ChrisB
Hi Chris,
im Prinzip, ja :-)
Hat sich aber schon was Neues ergeben:
Es sollen nämlich immer die Abteilungen zuerst genannt werden, deren "count" den höchsten Wert hat.
Meine MySQL-Version ist 4.0.27
Meine Query bisher ist:
SELECT m.ID,m.Datum f.ID, k.ID
FROM mon m, abt f, kun k
WHERE m.ID = f.ID
AND f.ID = k.ID
ORDER BY f.ID,m.Datum desc LIMIT 0, 60
Das macht zwar ungefähr das, was ich möchte, aber nur ungefähr. Denn die IDs aus den Abteilungen stehen zwar zusammen, aber (natürlich) nicht absteigend nach "Abteilungsstärke".
Habs mit ORDER BY count(f.ID) versucht, auch mit per SELECT abgefragtem count(f.ID) AS ... und entsprechendem ORDER BY. Hat alles nicht gefunkt.
Den Thread link:http://forum.de.selfhtml.org/archiv/2008/8/t175461/ habe ich gelesen, aber ich meine mal gelesen zu haben, dass mysql temporärer Views erst ab Vers. 5 unterstützt??
Jetzt bin ich erst mal wieder mit "meinem" Latein am Ende.
Grüße, Norbert
yo,
SELECT m.ID,m.Datum f.ID, k.ID
FROM mon m, abt f, kun k
WHERE m.ID = f.ID
AND f.ID = k.ID
ORDER BY f.ID,m.Datum desc LIMIT 0, 60
was du suchst sind korrelierte unterabfragen, um die jeweiligen anzahl der mitarbeiter anzugeben und die gehen erst ab mysql 4.1+ und höher. es gibt eigentlich keinen grund mehr, mit deiner version zu arbeiten, es sei den, es wird dir "aufgezwungen". aber selbst dann würde ich dagegen angehen.
eventuell könntest du dir mit einer view aushelfen, die nach den abteilungen grupppiert, um sie dann mit in die abfrage einzubauen.
Ilja
was du suchst sind korrelierte unterabfragen, um die jeweiligen anzahl der mitarbeiter anzugeben und die gehen erst ab mysql 4.1+ und höher. es gibt eigentlich keinen grund mehr, mit deiner version zu arbeiten, es sei den, es wird dir "aufgezwungen". aber selbst dann würde ich dagegen angehen.
Hi Ilja,
nein, wird mir nicht aufgezwungen.
Ich könnte auf eine 5er Version wechseln. Werde ich auch irgendwann machen, aber erst dann, wenn ich weiß, ob das Script letztlich irgendwann wirklich dort laufen soll.
Somit muß ich einen Workaround für die 4.0er Version erstellen. Die korrelierte Unterabfrage für die > 4.1 habe ich erstellt, die läuft auch, aber eben nicht auf 4.0.
eventuell könntest du dir mit einer view aushelfen, die nach den abteilungen grupppiert, um sie dann mit in die abfrage einzubauen.
Oops, jetzt komme ich etwas durcheinander.
Ist das hier eine korrelierte Unterabfrage oder eine View??
SELECT -- Gib mir
t.id -- die id,
t.gruppe -- die zugehörige Gruppe
v.anzahl -- und die Anzahl ihres Auftretens
FROM -- aus der Tabelle
tabelle t -- "tabelle", angesprochen über den Alias "t",
INNER JOIN ( -- die mit folgender Abfrage
SELECT --
gruppe, -- temporärer View (Definition siehe oben)
COUNT(gruppe) anzahl
FROM
tabelle
GROUP BY
gruppe
) v -- die über den zwingend erforderlichen Alias
-- "v" angesprochen wird
ON -- über die Spalten
t.gruppe = v.gruppe -- gruppe beider "Tabellen" verknüpft ist
ORDER BY -- sortiert nach
v.anzahl DESC -- der Anzahl des Auftretens, absteigend
Grüße, Norbert
yo,
Ich könnte auf eine 5er Version wechseln. Werde ich auch irgendwann machen, aber erst dann, wenn ich weiß, ob das Script letztlich irgendwann wirklich dort laufen soll.
hmm, klingt mir nicht sehr einleuchtend. wenn ich die wahl hätte, würde ich nichts mehr unter 4.1 machen, dann erledigt sich auch dein problem. warum sich mit ein problem auseinander setzen, das ich eleganter umgehen kann.
Ist das hier eine korrelierte Unterabfrage oder eine View??
weder noch, es ist eine unterabfrage in der FROM klausel, aber keine korrelierte. eine view ist ein richtiges objekt auf der datenbank: CREATE VIEW.....
Ilja
hmm, klingt mir nicht sehr einleuchtend. wenn ich die wahl hätte, würde ich nichts mehr unter 4.1 machen, dann erledigt sich auch dein problem. warum sich mit ein problem auseinander setzen, das ich eleganter umgehen kann.
Sicher. Wenn ich von Anfang an die Wahl habe. Aber von mysql4 auf mysql5 umsteigen, ist nicht ganz so problemlos. Jedenfalls weiß ich nicht, wie ich meinen Dump behandeln muß, damit er mir auf mysql5 keine Sonderzeichenprobleme macht.
Hat sicher was mit Umstellung von latin auf UTF8 zu tun, oder?
Ist das hier eine korrelierte Unterabfrage oder eine View??
weder noch, es ist eine unterabfrage in der FROM klausel
Na, aber die sollte doch funktionieren? Tut sie aber nicht, jedenfalls nicht meine..
Ratlos, Norbert
yo,
Sicher. Wenn ich von Anfang an die Wahl habe. Aber von mysql4 auf mysql5 umsteigen, ist nicht ganz so problemlos. Jedenfalls weiß ich nicht, wie ich meinen Dump behandeln muß, damit er mir auf mysql5 keine Sonderzeichenprobleme macht.
je früher du dich damit auseinander setzt, um so einfacher wird es für dich hinten raus werden. ich bin kein mysql experte, komme aus der Oracle welt. aber ich bni mir sicher, hier gibt es einige gute, die dir dabei tipps geben können, was die umstellung betrifft.
Na, aber die sollte doch funktionieren? Tut sie aber nicht, jedenfalls nicht meine..
unter 4.0 kann es auch nicht gehen, die version kann eben mit unterabfragen nicht umgehen. deswegen war ja mein vorschlag, das mit einer "richtigen view" zu lösen.
Ilja
unter 4.0 kann es auch nicht gehen, die version kann eben mit unterabfragen nicht umgehen. deswegen war ja mein vorschlag, das mit einer "richtigen view" zu lösen.
Ilja
Irgendwie beißt sich hier die Katze in den eigenen Schwanz.
DB umstellen, nur um diese Sortierung hin zu bekommen, find ich "overdressed".
Und mit "richtigen Views" kenne ich mich nu gar nicht aus.
Und letztlich geht es bei diesem Problem(chen) mehr um Kosmetik, als Funktion.
Gibts irgendwo nen Link,. wo das kurz und verständlich erklärt wird mit den Views?
Danke für Deine Hilfe
Norbert
yo,
Irgendwie beißt sich hier die Katze in den eigenen Schwanz.
DB umstellen, nur um diese Sortierung hin zu bekommen, find ich "overdressed".
nein, du siehst das zu eng auf dein problem bezogen. es gibt viele gründe, 4.0 nicht mehr zu verwenden, zumal diese version auch keine unterstützung mehr findet. schmeiss die version weg, je früher desto besser.
Und mit "richtigen Views" kenne ich mich nu gar nicht aus.
view sieht ganz einfach, keine raketentechnik. in prinzip ist es nur eine gespeicherte abfrage. in deinem falle eine gruppierung über die abteilungs_ids und zählst dazu die Anzahl der mitglieder. das als view verpackt und schon kannst du sie so benutzen, als wäre es eine eigene tabelle.
CREATE VIEW hier_den_name_der_view
AS
hier_deine_Abfrage
;
nachzulesen ist das ganze auf der mysql webseite und dokumentation, das findest du schon...
Ilja
nachzulesen ist das ganze auf der mysql webseite und dokumentation, das findest du schon...
Ilja
Views funktionieren in mysql ab Version 5 ;-)
Dank Dir :-)
Norbert
yo,
Views funktionieren in mysql ab Version 5 ;-)
oha, das war mir nicht klar, also noch ein grund mehr, nicht mehr 4.0 zu verwenden. ist nur ein rat, aber 4.0 ist selbstmord ;-)
Ilja
yo,
Views funktionieren in mysql ab Version 5 ;-)
oha, das war mir nicht klar, also noch ein grund mehr, nicht mehr 4.0 zu verwenden. ist nur ein rat, aber 4.0 ist selbstmord ;-)
Ilja
Na, jetzt übertreibst Du aber ;-)
Und vor allem, Du stellst das als These auf, begründest aber nicht wirklich.
Wie gesagt, bis auf dieses Problem im Thread läuft mein System wirklich ausgesprochen stabil und zuverlässig. Insofern beweist es doch, dass mysql4 nich ganz so drastisch schlecht ist, wie Du sagst.
Und trotzdem möcht ich nach count(irgendwas) sortieren können.
Und nu? :-)
Grüße, Norbert
yo,
Wie gesagt, bis auf dieses Problem im Thread läuft mein System wirklich ausgesprochen stabil und zuverlässig. Insofern beweist es doch, dass mysql4 nich ganz so drastisch schlecht ist, wie Du sagst.
beweisen muss ich gar nichts, ich gebe dir hier nur meinen rat. wie gesagt, deine version wird von mysql nicht mehr unterstützt, viele sehr nützliche features fehlen, dass sind schon mal gewichtige gründe, wenn es um produktivdaten geht. und die wahrscheinlichkeit, dass du weitere dinge tun willst, die mit 4.0 nicht gehen halte ich für sehr hoch.
Und trotzdem möcht ich nach count(irgendwas) sortieren können.
Und nu? :-)
nun ja, ich hätte auch gerne den jackpott im Lotto gehabt und nicht bekommen. sicherlich gibt es vielleicht workarounds. aber ich denke sauber ist es nur, wenn du ein upgrade machst oder eben darauf verzichtest. aber vielleicht weiss jemand mehr bezüglich mysql 4.0
Ilja
Hallo.
oha, das war mir nicht klar, also noch ein grund mehr, nicht mehr 4.0 zu verwenden. ist nur ein rat, aber 4.0 ist selbstmord ;-)
[...]
Und vor allem, Du stellst das als These auf, begründest aber nicht wirklich.
[...]
Und trotzdem möcht ich nach count(irgendwas) sortieren können.
Und nu? :-)
Nun hast du deinen Grund.
MfG, at