Limit Duplikate nur einmal zählen aber alle ausgeben

big-mac36

Benutzer
Beiträge
5
Moin,

ich habe leider bisher keine Lösung im Netz für mein Problem finden können,
daher wende ich mich nun an euch.

Ich habe eine Tabelle mit folgendem fiktiven Inhalt.


id | user_nummer| menge|erledigt
----+----------------+--------+-------
1 | 100 | 50 | 0
2 | 200 | 30 | 0
3 | 300 | 200 | 0
4 | 400 | 150 | 0
5 | 200 | 50 | 0
6 | 500 | 330 | 0
7 | 400 |50 | 0
8 | 100 |50 | 0

Ich benötige aus der Tabelle max 5 Ausgabewerte (id, user_nummer und menge ) mit der Bedingung erledigt = 0
Allerdings, sollen doppelt/mehrfach vorkommende user_nummern nicht mitgezählt bzw. nur einmal gezählt werden aber alle weiteren mit ausgegeben werden.

Sprich im Beispielfall müssten sechs Zeilen ausgeben werden trotz Limit von 5.
Ausgabe:
1 | 100 | 50
2 | 200 | 30
3 | 300 | 200
4 | 400 | 150
5 | 200 | 50
6 | 500 | 330

Ich hoffe man versteh was ich möchte.
Danke schon mal für eure Hilfe.
 
Werbung:
Ich denke ich habe einen Lösungsansatz.
mysql_query("SELECT id, user_nummer, menge FROM mytable WHERE user_nummer IN (SELECT DISTINCT user_nummer FROM mytable WHERE erledigt= 0 LIMIT 5)");

Allerdings, verweigert mir da mein xammp die Ausführung des querys.
Wenn ich das LIMIT weg nehme geht es, allerdings wird dann auch die WHERE Bedingung um subquery ignoeriert.
Wenn ich nun allerdings das subquery als eigenständiges query ausführe würd es ohne Probleme mit WHERE und LIMIT ausgeführt.
Verstehe nicht so ganz wieso es dann bei subquery hakt.
 
Es sollen 5 unique user_nummern ausgegeben werden.
Allerdings wenn eine user_nummer im Bereich von LIMIT 5 doppelt oder mehrfach vor kommt, soll diese mit ausgewgeben werden.

Das Ausgabe Array wie oben rechne ich dann später noch zusammen.
Im bereinigten Arry sieht es dann so aus:

1 | 100 | 50
2 | 200 | 80
3 | 300 | 200
4 | 400 | 150
6 | 500 | 330

Wenn man das direkt im query lösen kann, wäre das natürlich auch in Ordnung ;)
 
das paßt nicht, deine Aufgabenstellung ist nicht eindeutig.

Code:
test=*# select * from bigmac ;
 id | user_nummer | menge | erledigt
----+-------------+-------+----------
  1 |  100 |  50 | f
  2 |  200 |  30 | f
  3 |  300 |  200 | f
  4 |  400 |  150 | f
  5 |  200 |  50 | f
  6 |  500 |  330 | f
  7 |  400 |  50 | f
  8 |  100 |  50 | f
(8 Zeilen)

test=*# select user_nummer, array_agg(menge) from bigmac group by user_nummer limit 5;
 user_nummer | array_agg
-------------+-----------
  400 | {150,50}
  200 | {30,50}
  500 | {330}
  100 | {50,50}
  300 | {200}
(5 Zeilen)

wie man sieht, sind bei 100, 200 und 400 je 2 Werte, in Deinem letzten Beispiel addierst die Werte bei 200, nicht aber bei 100 oder 400.
 
Das Query könntest du mal im PHPmyAdmin oder was du als SQL Editor hast testen:
Code:
SELECT id, user_nummer, menge FROM mytable WHERE user_nummer IN (SELECT DISTINCT user_nummer FROM mytable WHERE erledigt= 0 ORDER BY user_nummer LIMIT 5)
das könnte eigentlich so funktionieren. Wenn MySQL das nicht kann dann vielleicht so:
Code:
SELECT id, user_nummer, menge FROM mytable WHERE user_nummer IN (SELECT t.user_nummer FROM (SELECT DISTINCT user_nummer FROM mytable WHERE erledigt= 0) t ORDER BY t.user_nummer LIMIT 5)
 
Werbung:
ok, ich habe nun festgestellt, warum xampp bei meinem versuch rumgezickt hat.
phpMyAdmin schmeißt mir nämlich eine Fehlermeldung aus
#1235 - This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

Gibt da irgendwelche workarounds?
 
Zurück
Oben