ich habe eine DB übernommen, bei der ich einige Anpassungen vornehmen soll.
Was habe ich:
User Tabelle, in der der PK varchar.
Rundgangstabelle PK serial.
Verknüpfungstabelle: varchar,integer
Die Aufgabe besteht nun darin für die User die Rundgänge zu erzeugen ( Anzahl Rundgänge ( ca. 15) < Useranzahl (>100) )
Die eine Seite ist klar - Anzahl der Rundgänge aus Rundgangstabelle holen, dann die Anzahl als LIMIT für die Userabfrage verwenden
Hier habe ich 2 Probleme
Wie kann ich zB. 15 User aus der Tabelle auslesen und dabei die User nach Alphabet auswählen ?
Wie kann ich wieder von vorne in der Usertabelle weitermachen, wenn ich zB. 10 Rundgänge erzeugt habe und wieder bei user A*** anfangen muss
test=*# create table namen ( name text);
CREATE TABLE
Time: 404,353 ms
test=*# copy namen from stdin;
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself.
>> andreas
>> max
>> heinz
>> steffi
>> udo
>> anne
>> tamara
>> gabi
>> uwe
>> \.
Time: 31917,932 ms
test=*# create sequence namen_seq maxvalue 3 cycle;
CREATE SEQUENCE
Time: 0,899 ms
test=*# select name, nextval('namen_seq') from namen;
name | nextval
---------+---------
andreas | 1
max | 2
heinz | 3
steffi | 1
udo | 2
anne | 3
tamara | 1
gabi | 2
uwe | 3
(9 rows)
Ich seh aber schon, du willst wieder von vorne anfangen bis jeder 2 mal durch ist. Fällt mit jetzt grad keine ad-hoc - Lösung ein außer man schreibt sich eine kleine Funktion dafür.
Nicht nur 2 mal, das Ding soll die nächsten Jahre so laufen.
Wie gesagt, im Moment gibt es ca. 15 Rundgänge, die von einer Gruppe von ca. 100 Usern 1x die Woche durchgeführt werden muss.
dh. ca. 60 Rundgänge pro Monat
select name, nextval('namen_seq') from (select name from namen union all select name from namen) bla;
Für 2 Durchgänge. Die Anzahl der Durchgänge via Funktion variabel zu gestalten (innerhalb der Funktion dann N mal UNION ALL machen) überlasse ich Dir zur Übung
ok das würde dann wohl heißen, dass ich die Anzahl der Rundgänge auslesen muss, diese als maxvalue an die sequence übergebe, und da die Rundgänge alle 4 Wochen erzeugt werden vor Aufruf meiner Funktion die Sequence lösche, bzw. ändere da sich in der Zeit die Anzahl der Rundgänge ändern könnte.
Was ich da jetzt nicht hinbekomme, wahrscheinlich wieder mal eine Syntaxproblematik:
create sequence namen_seq maxvalue ( select count(rowid) from tours ) cycle;