• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

2 verschiedene Verknüpfungen mit einer Tabelle

Status
Für weitere Antworten geschlossen.

Sn0opy

Neues Mitglied
Hiho,

naja, das Topic ist meiner Meinung ziemlich dämlich gestellt. Ich versuche es mal besser zu erklären.

Ich habe 2 Tabellen. In der einen steht die userid des Empfängers und des Senders + einen Text. In der anderen Tabelle stehen die Namen der entsprechenden userids.

Nun brauche ich für die Ausgabe den Empfänger UND den Sender und ich wüsste grad nicht, wie ich beides miteinander verknüpfen kann. Mein bisheriger Teil:

Code:
SELECT * FROM `tabelle1`, `tabelle2` WHERE `textid`=5 AND `userid`=`senderid`

hinten noch ein AND `userid`=`empfaengerid` dran zusetzen würde ja nicht funktionieren und wäre schon rein logisch, ziemlich scwachsinnig.


Tabellenaufbau nochmal etwas genauer:

Tabelle1: textid, sender, empfaenger, text
tabelle2: userid, username, etc...


Ich möchte das ganze möglichst in einer Abfrage haben, darum frag ich überhaupt hier. In 2 Abfragen wäre es definitiv einfacher würde ich sagen.
 
Zuletzt bearbeitet:
Werbung:
Versuchs mit einem join. Z.B.:

Code:
SELECT tabelle1.text, empfaenger.name as empfaengername, sender.name as sendername FROM `tabelle1` 
LEFT OUTER JOIN tabelle2 as empfaenger on empfaenger.userid = tabelle1.empfaengerid
LEFT OUTER JOIN tabelle2 as sender on sender.userid = tabelle1.senderid
WHERE `textid`=5

Das gleiche ginge je nach deinem sonstigen Datenbankmodell auch im FROM (halt die tabelle2 zwei Mal einbinden).
 
ich denke ich hab das gleiche problem aber ich werde durch die antwort von threadi nicht klüger o.o


Code:
errorcode:
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /data/apache/users/kilu.de/nosworld/www/sufu.php on line 55

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /data/apache/users/kilu.de/nosworld/www/sufu.php on line 62
 
source:
$data = mysql_query("
SELECT `name` , `level`
FROM `monster` 
WHERE `name` LIKE '%$findname%'
ORDER BY `'$order'` ASC 
AND `level` = '$searchlevel' ");
 
 
while($result = mysql_fetch_assoc( $data )) 
{ 
echo ''.$result['name'].'';
echo "<br>$result['level']";
} 

$anymatches = mysql_num_rows($data); 
if ($anymatches == 0) 
{ 
echo "Es wurde kein Eintrag gefunden<br><br>"; 
}

bin wie gesagt was mysql angeht relativ noob aber wird schon so langsam ^^
darf ich, wenn mehrere ergebnisse auf einmal ausgewertet werden nicht fetch assoc bzw num rows verwenden? x.x und wenn nein. was dann?

vielen dank im vorraus > martin
 
Werbung:
Dein Problem liegt imho woanders. Das Statement ist falsch. Richtiger wäre doch:

Code:
SELECT `name` , `level`
FROM `monster` 
WHERE `name` LIKE '%$findname%' AND  `level` = '$searchlevel'
ORDER BY `'$order'` ASC

(das AND war an der falschen Stelle, nämlich am Ende des Statement)

Da das Statement nur einen Fehler zurückliefert gibt es in $data kein gültiges Ergebnis - und das sagen diese Fehlermeldungen aus.

Kleiner Tipp: teste das Statement erst im phpmyadmin bevor du es in der Webseite einbaust ;-)
 
Code:
SELECT * FROM `tabelle1`, `tabelle2` WHERE `textid`=5 AND `userid`=`senderid`

Tabellenaufbau nochmal etwas genauer:

Tabelle1: textid, sender, empfaenger, text
tabelle2: userid, username, etc...
Code:
SELECT * FROM `tabelle1`, `tabelle2` WHERE `tabelle1`.`textid`=5 AND `tabelle2`.`userid`=`tabelle1`.`senderid`
 
Werbung:
Code:
SELECT * FROM `tabelle1`, `tabelle2` WHERE `tabelle1`.`textid`=5 AND `tabelle2`.`userid`=`tabelle1`.`senderid`

Das wäre doch dann aber falsch, da ich ja den Namen des Empfängers und des Sender brauche. Habe im übrigen schon eine recht umständliche aber funktionierende Lösung gefunden.
 
PHP:
$sql = 
                          "select EM.NAME EMPFAENGER, AB.NAME ABSENDER, CONTENT, TITEL, DATUM, NACHRICHTEN_ID, NACHRICHTEN.ABSENDER ABS, NACHRICHTEN.EMPFAENGER EMP
                          from NACHRICHTEN, USER AB, USER EM 
                          where NACHRICHTEN.ABSENDER = AB.USER_ID
                          and EMPFAENGER = EM.USER_ID
                          and NACHRICHTEN_ID = ".$nachricht_id;
                          $result = mysql_query($sql);
                          if ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
                              $message_id = $row["NACHRICHTEN_ID"];
                              $empfaenger = $row["EMPFAENGER"];/* Für den USER-Namen */
                              $absender   = $row["ABSENDER"];/* Für den USER-Namen */
                              $abs        = $row["ABS"]; /* Für die USER-ID */
                              $emp        = $row["EMP"]; /* Für die USER-ID */
                              $content    = $row["CONTENT"];
                              $content    = str_replace("<", "&lt;", $content);
                              $content    = str_replace(">", "&gt;", $content);
                              $content    = str_replace("\n", "<br>", $content);
                              $content    = str_replace("\\\"", "\"", $content);
                              $titel      = $row["TITEL"];
                              $datum      = $row["DATUM"];
                           }
Funktioniert bei mir so...
 
Meine Query:

Code:
"SELECT `subject` , `message` , `sendtime` , (
SELECT `username` 
FROM `privatemsgs` , `users` 
WHERE `userid` = `senderid` 
AND `pnid` =$pnid
) AS `sender` , (

SELECT `username` 
FROM `privatemsgs` , `users` 
WHERE `userid` = `recipientid` 
AND `pnid` =$pnid
) AS `empfaenger` , (
		
SELECT `senderid` 
FROM `privatemsgs` , `users` 
WHERE `userid` = `senderid` 
AND `pnid` =$pnid
) AS `senderid` 
		
FROM `privatemsgs` , `users` 
WHERE `pnid` =$pnid
LIMIT 1 , 1"

Mit dem 1. Select hol ich mir, wie man sieht, die Hauptdaten der Message: subject, message ,sendtime. Mit der 2. und 3. hole ich mir die Namen vom Empfänger und dem Sender (ggf. ne Blöde Namensgebung). FROM und WHERE sind dann ja klar und aus welchem Grund auch immer, bekomme ich mehrmals das selbe Ergebnis. Darum setz ich nen Limit rein. Denke es liegt einfach an den 3 Selects.
 
Werbung:
Status
Für weitere Antworten geschlossen.
Zurück
Oben