PHP & mysql: Problem
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
anfhrungszeichen
beitrag
beste quelle
bestimmten grad
datenbank
funktion
gemt
jeweiligen ids
lsung
manual
mehreren tabellen
message
order
richtig einsetzt arrays
schleifen
strkerer einarbeitung
tabelle
user
username
vielen dank
-
Hi,
ich hab mir ein kleines Script geschrieben, hab aber ein Problem.
Es wäre sehr nett, wenn mir jemand helfen könnte.
Der Code soll die Nachrichten von der Datenbank auslesen und dann durch eine Schleife alle ausgeben.
Soweit alles ok.
Dann soll der Userid, die in "message_to" und "message_from" steht durch den eigentlichen Usernamen ersetzt werden. Das funktioniert auch, aber nur theoretisch: Wenn ich einen User gelöscht habe, dann stimmt die Zuweisung nicht mehr :(
$res = mysql_db_query("$db_name", "select * from ".$db_prefix."messages order by message_id"); $num = mysql_num_rows($res); $res2 = mysql_db_query("$db_name", "select * from ".$db_prefix."users order by user_id");
for ($i=0; $i<$num; $i++) { $a = mysql_result($res, $i, "message_folder"); if ("0" == $a) { $nn = mysql_result($res, $i, "message_from"); $vn = mysql_result($res, $i, "message_to"); $pn = mysql_result($res, $i, "message_subject"); $ge = mysql_result($res, $i, "message_message"); $gt = mysql_result($res, $i, "message_read"); $lf = mysql_result($res, $i, "message_id"); // Da es keinen Usernamen mit der Id = 0 gibt, wird hier eins abgezogen: $nn2 = $nn -1; $vn2 = $vn -1; $nn3 = mysql_result($res2, $nn2, "user_name"); $vn3 = mysql_result($res2, $vn2, "user_name"); if ($gt == "1") { $gt = "Pn schon gelesen"; } if ($gt == "0") { $gt = "Pn noch nicht gelesen"; } echo "<tr><td>$lf</td><td>$nn3</td><td>$vn3</td>"; echo "<td>$pn</td><td>$ge</td><td>$gt</td></tr>"; } }
$nn und $vn sind jeweils die Usernamen
Wäre nett, wenn jmd von euch ne Lösung hat :) -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Moin.
Habe das Script mal ein wenig umgebaut...
<?php $query = mysql_db_query("$db_name", 'SELECT t1.*, t2.user_name AS fromname, t3.user_name AS toname FROM '.$db_prefix.'messages AS t1, '.$db_prefix.'users AS t2, '.$db_prefix.'users AS t3 WHERE t1.message_from = t2.user_id AND t1.message_to = t3.user_id ORDER BY message_id DESC'); while($res = mysql_fetch_assoc($query)) { if ('0' == $res['message_folder']) { if ($res['message_read'] == '1') { $read = 'PN schon gelesen'; } else { $read = 'PN noch nicht gelesen'; } echo '<tr><td>'.$res['message_id'].'</td><td>'.$res['toname'].'</td><td>'.$res['fromname'].'</td>'; echo '<td>'.$res['message_subject'].'</td><td>'.$res['message_message'].'</td><td>'.$read.'</td></tr>'; } } ?>
Der Query '$query' ist mit Joins realisiert... Joins dienen der Verknüpfung mehrerer Tabellen in einer Datenbank zur eindeutigen Bestimmung einer Ergebnismenge. Warum ich es so abgeändert habe? Um die Benutzernamen direkt ohne komplizierte Umwege anhand der jeweiligen IDs zu bestimmen. ;)
'$res' erstellt ein assoziatives Array aus der Ergebnissmenge und wird in einer Schleife abgefragt. Der Rest dürfte selbsterklärend sein. ^^
Ich konnte es natürlich nicht lokal auf Funktionalität prüfen, aber eigentlich müsste es funktionieren... ^^
Bitte nicht vergessen, die Anführungszeichen entsprechend abzuändern.
GrEetz, Olliander
Beitrag geaendert: 15.3.2007 20:24:37 von olliander -
Hui, Vielen Dank, das Script funktioniert einwandfrei
-
Hui, Vielen Dank, das Script funktioniert einwandfrei
Kein Problem...
Habe eben Google angeschmissen und nach einer Seite zum Thema 'MySQL Join' gesucht, die Dir evtl. hilfreich sein könnte... Hier die (nach kurzem Überfliegen) meiner Meinung nach beste Quelle:
http://www.infos24.de/mysqle/handbuch/12_mysql_joins.htm
Warum Du Dir das anschauen solltest? Nun... Wie schon erwähnt ermöglichen Joins das Verknüpfen mehrerer Tabellen. Du hast sicher schon bemerkt, welche signifikanten Vorteile das mit sich bringt. Auf der einen Seite lassen sich Ergebnismengen aus mehreren Tabellen prima konkretisieren, ohne dabei umständliche Umwege über mehrere Queries, Löschen von Variablen, nicht eindeutige Zuordnungen etc. gehen zu müssen. Auf der anderen Seite wirst Du später, bei stärkerer Einarbeitung in das Thema relationale Datenbanken, sehr schnell merken, dass Joins ab einem bestimmten Grad der Normalisierung (wichtiges Abstraktionsprinzip innerhalb von relationalen Datenbanken) unerlässlich sind. Also am besten gleich angewöhnen...
Zudem würde ich Dir empfehlen, dass Du Dir Arrays und die vielen mysql(i)-Funktionen genauer anschaust, ich habe gemerkt, dass Du auch hier bisher eine etwas umständliche Herangehensweise verwendet hast. Nur soviel sei dazu gesagt... Variablen sind gut, Arrays sind oft besser...
Man spart übrigens eine ganze Menge Tipp-Arbeit, wenn man sich diese ganzen Dinge zu Gemüte führt und sie richtig einsetzt... ^^
Arrays:
http://www.php.net/manual/de/language.types.array.php
mysql-Funktionen:
http://www.php.net/manual/de/ref.mysql.php
mysqli-Funktionen:
http://www.php.net/manual/de/ref.mysqli.php
GrEetz, Olliander
Beitrag geaendert: 15.3.2007 22:45:18 von olliander -
Hey, tausend Dank
Ich kannte Joins vorher nicht, das ist so echt viel einfacher.
Hab die Links mal als Lesezeichen gesetzt und werde das morgen mal ausgiebig studieren ;)
Beitrag geaendert: 15.3.2007 22:52:41 von sesch -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage