Hallo zusammen,
habe folgendes Anliegen:
Tabelle teamlog:
| USER1 | USER2 |
| PL 1 | PL 2 |
| PL 2 | PL 3 |
| PL 1 | PL 3 |
| PL 1 | |
In dieser Tabelle werden unter USER1 und USER2 verschiedene Player gespeichert die ein Team
bilden sollten.
Wenn dann Player 1 sich einloggt in die Maske dann sieht er sich als User 1 und Player 2 als User 2.
Mit folgender Abfrage kann ich dann auf die Daten für den Player 1 zugreifen:
select * from teamlog where (USER1=?)
Somit überprüft die Eingabe und nach Vergleich in der Tabelle spuckt er die Daten raus
PL1 - PL2
PL1 - PL3
PL1
Aber wie kriege ich das hin daß wenn sich User 2 einloggt auch sehen kann daß er auch in der Tabelle gespeichert ist, da die Abfrage ja where (USER1=?)
lautet
Nach der Abfrage müßte folgendes rauskommen:
PL1 - PL2
PL2 - PL3
es kommt aber nur:
PL2 - PL3
Vielen Dank im Voraus
so ganz klar wird nicht, was Du da hast. Mal ‘PL 1’ und mal ‘PL1’ - das sind schon unterschiedliche Dinge. Kann es sein, daß Du wissen willst, ob er in Spalte USER1 ODER in Spalte USER2 ist?
Ja ok, habe es falsch geschrieben…
Sollte immer PL1 oder PL2 oder PL3 sein…
Die Abfrage soll bei den Playern alle Zeilen anzeigen wo sie gespeichert wurden aber die zeigt die Einträge nur wenn der Player der sich einloggt in der ersten Spalte USER1 gespeichert ist, befindet sich der eingeloggte Player in der Spalte 2 USER2 dann wird nix angezeigt
ja, dann schaue doch einfach noch mal auf Deine WHERE - Condition …
Habe alles mögliche getestet und komme nicht dahinter…
Das Problem ist aber das die where condition so bleiben muss.
Habe dann noch dazu gepackt (user2=user1) damit er die zweite Spalte liest aber dann ist es egal wer sich einloggt, es wird alles angezeigt…
Es muss eine Möglichkeit geben sowas zu machen:
Log dich ein und egal ob du auf Spalte 1 oder Spalte 2 bist, zeige mir die Zeilen wo du drin bist…
select * from teamlog where (user1=?) and (user2<>’ ') or (user2=user1)… aber dann bin ich mit meinem Latein am Ende
oach menno, stell dich mal ned so an …
postgres=# create table gregorio(u1 text, u2 text);
CREATE TABLE
postgres=# copy gregorio from stdin;
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself, or an EOF signal.
>> p1 p2
>> p2 p3
>> p1 p3
>> p1 NULL
>> \.
COPY 4
postgres=# select * from gregorio where u1 = 'p1' or u2 = 'p1';
u1 | u2
----+------
p1 | p2
p1 | p3
p1 | NULL
(3 rows)
postgres=# select * from gregorio where u1 = 'p2' or u2 = 'p2';
u1 | u2
----+----
p1 | p2
p2 | p3
(2 rows)
postgres=#
vielen dank aber das wird so in der Form nicht funktionieren da die Abfrage ja mit einer Eingabe verknüpft ist.
select * from gregorio where u1 = ? or u2 = 'p1'
ich kann doch nicht bei der abfrage u2=p1 vergleichen da ich ja nicht weiß ob es existiert
ich muß leider immer vom u1=? ausgehen
irgendwie versteh ich jetzt Dein Problem nicht …
ich versuche es nochmal…
teamlog Tabelle:
|USER1|USER2|
|Maier |Müller |
|Müller |Maier |
select * from teamlog where USER1=?
Maier loggt sich ein, es wird verglichen was alles
in USER1 mit Maier gespeicher ist, ergibt dann : Maier Müller
select * from teamlog where USER1=?
Müller loggt sich ein, es wird verglichen was alles
in USER1 mit Müller gespeicher ist, ergibt dann : Müller Maier
select * from teamlog where USER1=?
muß erweitert werden um…
(Schau in USER2 nach eingeloggten “USER1=Maier” nach und wenn der auch da vorhanden ist,
dann bitte anzeigen)
wenn die Abfrage vernünftig ist dann ergibt das sowas:
Maier Müller
Müller Maier
also, mit Deiner Tabelle:
-
wenn Meier sich einloggt, sollen beide Datensätze gzeigt werden, weil er im ersten als USER1 ist und im zweiten Datensatz als USER2
-
wenn Müller sich einloggt, sollen auch beide angezeigt werden, weil er im ersten als USER2 ist und im zweiten als USER1.
soweit korrekt?
genau so wäre die abfrage.
Maier befindet sich einmal in Spalte 1 und einmal in Spalte 2 dann soll die Abfrage beide Zeilen anzeigen.
Ist es überhaupt machbar?
du meinst Post 5?
select * from gregorio where u1 = 'p1' or u2 = 'p1'
ja
(123456789 Post muß 20 Zeichen lang sein …)
ich verstehe das irgendwie nicht…
meinst du ich soll mehrere abfragen machen?
select * from teamlog where USER1=?
select * from teamlog where USER1='Maier' or USER2 = 'Maier'
nein, nur eine.
Füllmasse: jkxdhvfkjcvhyxcjkhvkav
sorry, ich kann dir echt nicht folgen…
füllmasse??
Füllmasse, weil ein Post mind. 20 Zeichen lang sein muß. Das war es nicht ohne Füllmasse.
Achso ok…
egal, ich komme aus deinen Beispielen nicht klar, ich muß ein anderen Weg suchen.
vielen Dank
Viel Erfolg dabei. Schade, daß Dir meine Lösung nicht gefällt.