Joins sind doch gerade die Stärke von SQL.
inner joins sind die meistbenutzten.
Wenn du zwei Tabellen hast (users und guestbook_entries), für ein Gästebuch, bspw.
users:
user_id int(11) not null primary key auto_increment
username varchar(255) not null
last_login int(11) unsigned not null
guestbook_entries
entry_id int(11) not null primary key auto_increment
content blob not null
author int(11) not null
written_on int(11) unsigned not null
Wenn du also niemals einen User oder einen Eintrag aus deinem Gästebuch löschen würdest. Du willst alle Einträge deines Gästebuch sehen willst, dabei aber nur einmal mysql_query() machen.
Code:
select
guestbook_entries.content as inhalt,
guestbook_entries.written_on as datum,
users.username as benutzername
from
guestbook_entries,
users
where
guestbook_entries.author = users.user_id
order by
datum desc
PHP:
$sql = DAS_VON_OBEN;
$result = mysql_query($sql);
while($row = mysql_fetch_assoc($result)) {
echo '<hr>';
echo 'Benutzername:'.htmlspecialchars($row['benutzername']);
echo '<br>Datum des Eintrags: '.date('d.m.Y H:i',$row['datum']);
echo '<p><b>Inhalt:</b><br />'.nl2br(htmlspecialchars($row['inhalt'])).'</p>';
}
mysql_free_result($result);
Kleine Erklärung:
Du verknüpfst zwei Tabellen (bei der where Klausel) indem du die user-ID aus der Tabelle der User mit der User-ID des Autors in der Tabelle der Einträge vergleichst.
Wenn du aber ab und zu User löschst, die Einträge aber nicht musst du das so machen:
Code:
select
guestbook_entries.content as inhalt,
guestbook_entries.written_on as datum,
users.username as benutzername
from
guestbook_entries,
left join
users
on
guestbook_entries.author = users.user_id
order by
datum desc
Wenn ein User gelöscht wurde, steht in "benutzername" NULL und nicht ein leerer String.
PHP:
$sql = DAS_VON_OBEN;
$result = mysql_query($sql);
while($row = mysql_fetch_assoc($result)) {
echo '<hr>';
if ($row['benutzername']===null) {
echo '<i>Gast</i>';
} else {
echo 'Benutzername:'.htmlspecialchars($row['benutzername']);
}
echo '<br>Datum des Eintrags: '.date('d.m.Y H:i',$row['datum']);
echo '<p><b>Inhalt:</b><br />'.nl2br(htmlspecialchars($row['inhalt'])).'</p>';
}
mysql_free_result($result);
Right Join ist sehr selten benutzt.