Archiv verlassen und diese Seite im Standarddesign anzeigen : Kleine Knobelaufgabe
Hallo,
ich bin noch ein wenig neu in der mySQL Thematik und habe eine Frage.
Ich habe in einer Tabelle zwei Unterschiedliche UserID (eben von 2 Personen), deren Name ich über eine Usertabelle ermitteln möchte. Bekomme ich das in eine sql-anfrage ?
Details
subject message Absenderid empfägerid
blablabla testtest 121212 242424
xxxxxxxx huhuhu 321321 654654
wie kann ich die Namen in einem Schwung ermitteln ??
Vielen Dank !!!
Hi
Du musst mit Foreign Key (Fremdschlüssel) arbeiten. Dieser kannst du beim erstellen der ersten Tabelle der Spalte absenderid und empfängerid zuweisen. Der Fremschlüssel muss dann auf die id der User Tabelle verweisen.
Zur Abfrage:
SELECT name FROM usertabelle WHERE iduser IN (SELECT empfängerid FROM erstetabelle);
So könnte das aussehen!
Cyrill
Ich glaube, wir reden von der gleichen Sache.
Tabelle 1
subject message Absenderid empfägerid
blablabla testtest 121212 242424
xxxxxxxx huhuhu 321321 654654
Tabelle 2
Userid Name
121212 Jennifer
242424 Horst
321321 Heinz
654654 Jörg
Die Userid ist der Fremdschlüssel. Ich würde meine Anfrage anfangen...
select
table1.subject
table1.message
table2.name
table2.name
table2.name
from table1
join left table2 on (table1.absenderid = table2.userid and
table1.empfängerid = table2.userid)
aber logischerweise geht die nicht, da die db ja nicht weiß, welche namen sie da eintragen soll. Hier brauche ich Eure Hilfe.
Hi
Versuch es mal mit folgendem SQL Command!
SELECT tabelle1.subject, tabelle1.message,
(SELECT tabelle2.name FROM tabelle2 WHERE tabell2.iduser = tabelle1idempfänger) AS empfängername,
(SELECT tabelle2.name FROM tabelle2 WHERE tabell2.iduser = tabelle1idabsender) AS absendername
FROM tabelle1;
Cyrill
oh cool. Ich dachte, Untertabellen gehen bei mysql nicht. Werde es gleich ausprobieren. Durch das AS empfängername kann ich die neue Zelle direkt mit empfängername ansprechen, oder ?
Vielen Dank soweit.
Hi...
mhh ich bin mir nicht mehr ganz sicher ob das mit mysql wirklich geht!
aber ich denke es sollte schong gehen!
Ja sollte eigentlich gehen wenn man es mit AS definiert...!! Und sonst kannst du es ja auch mit der spaltennr angeben!
Cyrill
ok, ich check das und geb dann wieder bescheid.
leider geht es nicht. Wie es scheint sind in der mysql 4.0 erst die ersten Multitable-Ansätze zu finden. Meine Wünsche hat wohl noch keiner geäußert.
jörg
die sache ist relativ einfach. Du kannst in einen select eine Tabelle mehrfach einbinden:
(m=mail,ua=user-absender,ue=user-empfänger)
select
m.subject,
m.message,
from table1 m,table2 ua,table2 ue
where m.absenderid=ua.userid
and m.empfängerid =ue.userid
:cool:
ps: deine tabellen heissen aber nicht wirklich table1 und table2 ?!
pps: mysql kann schon lange mit mehreren tabellen gleichzeitig umgehen. Was du eigentlich meintest sind subselects; und die sollte jetzt wohl gehen.
meine Tabelle heißen anders. Mein Problem ist auch bei weiten komplizierter. Aber das ist die Kernfrage. Ich werde das gleich mal testen.
noch eine Frage. Ich brauche die Verknüpfung über Left Join, also so:
select
m.subject,
m.message,
ua.username as Absendername,
ue.username as Empfaengername
from table1 m
left join table2 ua ON (m.absenderid=ua.userid)
left join table2 ue ON (m.empfängerid =ue.userid)
Aber genau hier meldet die db, das ua.username eine unbekannte Spalte sei.
Habt Ihr hier auch noch mal ein Hinweis ?
wenn ich table2 so sehe heisst die spalte "name" und nicht "username" :rolleyes:
richtig, aber das liegt nur daran, dass wir hier ein beispiel gebaut haben, was ich nicht konsequent weitergeführt habe. Mein original ist in der sicht stimmig.
Trotzdem kann schein MySQL nicht mit Tabellen Alias im Left join umgehen, also zum Beispiel
left join table2 Alias ON (m.absenderid=Alias.userid)
Mache ich da was falsch ?
Hi,
wie siehts so aus?
SELECT a.subject a.message a.empfägerid b.name
FROM tabelle1 a
LEFT JOIN tabelle2 b
ON a.absenderid = b.userid
MfG
MySQL meldet:
Unknown column 'b.userid' in 'field list'.
Original geschrieben von Joerg
MySQL meldet:
Unknown column 'b.userid' in 'field list'.
Das SQL statement ist richtig, denn genauso läufts bei mir ja auch :)
entweder hast Du hier "LEFT*JOIN*tabelle2*b" was falsch angegeben
oder hier "ON*a.absenderid*=*b.userid"
MfG
Nico
irgendetwas hatte ich da falsch gemacht.
Aber. jetzt geht es !!
thx
buffer_7
13-07-2002, 12:04
Hallo,
Ich hoffe, ich hab das wenigstens teilweise verstanden.
Was kommt raus wenn die Abfrage so aussieht ??
__________________________________________________ ____
SELECT a.subject, a.message, a.empfängerid, b.name, b.userid
FROM tabelle1 a, tabelle2 b
WHERE a.empfängerid = b.userid;
__________________________________________________ _____
Gruß
buffer_7
p.s.: sollte ich was falsch haben, sag was anders sein soll und ich checks nochmal
Du bekommst genau die Werte aus tabelle1 und 2, die Deinem Filter a.empfängerid = b.userid entsprechen. Wenn eine empfängerid aus a gar keine passende Userid in b hat, wirst du sie damit nie anzeigen können. Das war mein Ansinnen.
Original geschrieben von buffer_7
Hallo,
Ich hoffe, ich hab das wenigstens teilweise verstanden.
Was kommt raus wenn die Abfrage so aussieht ??
__________________________________________________ ____
SELECT a.subject, a.message, a.empfängerid, b.name, b.userid
FROM tabelle1 a, tabelle2 b
WHERE a.empfängerid = b.userid;
__________________________________________________ _____
Gruß
buffer_7
p.s.: sollte ich was falsch haben, sag was anders sein soll und ich checks nochmal
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.