mkScheller Geschrieben 6. Oktober 2011 Teilen Geschrieben 6. Oktober 2011 Hallo, ich würde mir gerne bis zu 10 Datensätze ausgeben lassen, die zu einer Gruppe gehören. Ich dachte an sowas wie SELECT role, username FROM users GROUP BY role LIMIT 10; das klappt allerdings leider nicht, hat jemand ne (supersimple) Idee= Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Sacaldur Geschrieben 6. Oktober 2011 Teilen Geschrieben 6. Oktober 2011 wichtig: welches BDMS verwendest du? je nach DBMS gibt es dafür verschiedene Lösungsansätze Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
mkScheller Geschrieben 6. Oktober 2011 Autor Teilen Geschrieben 6. Oktober 2011 mysql ist mein DBMS Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
mkScheller Geschrieben 6. Oktober 2011 Autor Teilen Geschrieben 6. Oktober 2011 (bearbeitet) SELECT role, username FROM users ORDER BY role; liefert schon die Ergebnisse der Rolle nach aufsteigend, aber LIMIT 10 gibt nur die ersten 10 aus, d.h. nicht pro Rolle, also nur die ersten 10 mit role=1, insgesamt sind es 247 Datensätze, wobei gute 100 die role=1 haben, von diesen sollen aber nur 10 angezeigt werden Bearbeitet 6. Oktober 2011 von mkScheller Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
derSuhler Geschrieben 6. Oktober 2011 Teilen Geschrieben 6. Oktober 2011 Hi wie wäre es, wenn du das Ergebnis der Abfrage ohne Limit in einem View speicherst und dann auf das View das Limit anwendest? Nicht schön, vor allem wenn es mehr Datensätze werden, aber es funktioniert... Oder du solltest dein Datenbankmodell noch einmal überdenken (-> 3. Normalform). Wenn du die Rolle und den Usernamen trennst, dann kannst du die Rolle gruppieren und dir die Usernamen dazu per JOIN verknüpfen... das sollte funktionieren. MfG Suhler Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
mkScheller Geschrieben 6. Oktober 2011 Autor Teilen Geschrieben 6. Oktober 2011 Dritte Normalform - darauf muss mal einer kommen! Das wird nicht umgesetzt, da dann pro Aufruf gejoint würde, was def. zu massiven Performance-Einbußen führt. Nunja, wenn ich die Lösung irgendwann rausgefunden habe (low-prio), dann poste ich das hier. Gruss Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Sacaldur Geschrieben 7. Oktober 2011 Teilen Geschrieben 7. Oktober 2011 (bearbeitet) ich habe einfach mal Google angestrengt und "mysql limit" eingegeben als Suchvorschlag sprang mir "mysql limit offset" ins Auge, welches als ersten Treffer die SELECT-Syntax brachte wie man bei LIMIT sehen kann, kann man auch ein Offset angeben das dürfte bei dem Problem helfen Edit: ich habe mir das Problem noch einmal angesehen und mir ist aufgefallen, dass das scheinbar doch nicht das richtige wäre du könntest mehrere Abfragen für jede Rolle machen (und diese zusammenführen), was aber nur sinnvoll ist ich bin mir gerade nicht sicher, ob man dies mit reinem SQL so hinbekommen kann, dass immer alle Rollen berücksichtigt werden, ohne dass die einzelnen Rollennummern direkt im SQL-Statement stehen müssen eine View könnte man zur Aufteilung der Abfrage auf mehrere Abfragen verwenden grundsätzlich sollte man beim modellieren einer Datenbank diese in die 3. Normalform bringen allerdings kann es Sinn machen, aus Performance-Gründen von dieser wieder abzuweichen für mich sieht es so aus, als wären die Eigenschaften der verschiedenen Rollen und die Benutzer voneinander getrennt und "role" in dem Fall ein Fremdschlüssel allerdings ist das nur eine Vermutung auf Basis schwindend geringer Informationen über die Datenbank ^^ Bearbeitet 7. Oktober 2011 von Sacaldur Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.