Ik heb nu dit script, maar aangezien de 2 in verbinding staan met leden_berichten.van en leden.id, dacht ik eraan om joins te gebruiken. Dit is mijn huidig script:
<? $select = "SELECT leden.gebruikersnaam, leden_berichten.onderwerp, leden_berichten.bericht, leden_berichten.datum FROM leden_berichten WHERE id = ".$id." && naar = ".$_SESSION['gid']." INNER JOIN leden_berichten ON (leden.id = leden_berichten.van)"; ?>
<?$select="SELECT leden.gebruikersnaam, leden_berichten.onderwerp, leden_berichten.bericht, leden_berichten.datum FROM leden_berichten WHERE id = ".$id." && naar = ".$_SESSION['gid']." INNER JOIN leden_berichten ON (leden.id = leden_berichten.van)";?>
Je wilt de berichten van een lid bepalen ? Dan heb je toch aan een WHERE-conditie met het lid-id genoeg ? Als je dan toch JOINs wilt gebruiken (wat dus niet echt nodig is) dien je een LEFT JOIN te gebruiken denk ik (leden-tabel LEFT JOIN berichten-tabel, in die volgorde) - een INNER JOIN levert je altijd de "tightest fit" van twee tabellen, en aangezien je leden tabel maar één item bevat zal je query-resultaat dus ook maar uit één resultaat-rij bestaan (ik kan het fout hebben though) ?
Je hoeft iig niet per se een JOIN te gebruiken.
Maar als ik de WHERE-conditie gebruik, kan ik dan ook het volgend doen:
ik hoef enkel de gebruikersnaam uit de tabel leden die overeenkomt met het veld 'van' in leden_berichten (hier heb ik wel alles uit nodig). Dan heb ik toch 2 query's nodig, niet?
Starting with MySQL 4.1, all subquery forms and operations that the SQL standard requires are supported, as well as a few features that are MySQL-specific.
Zoals jij het doet, zijn het meer dan twee queries he ?
Je zou dit sorteer-probleem ook naar PHP kunnen verplaatsen, door bijvoorbeeld alles in arrays op te slaan (en daar dus te 'sorteren').
Je kan ook twee tabellen aan elkaar hangen door gewoon de juiste kolommen met elkaar te laten 'matchen', dus je zou de twee bovenstaande queries kunnen samenvoegen, bijvoorbeeld op de volgende manier:
SELECT l.gebruikersnaam, lb.*
FROM leden l, leden_berichten lb
WHERE lb.van = l.id
AND lb.id = $id
AND lb.naar = $_SESSION['gid']
SELECT l.gebruikersnaam, lb.*
FROM leden l, leden_berichten lb
WHERE lb.van = l.id
AND lb.id =$id
AND lb.naar =$_SESSION['gid']
SELECT l.gebruikersnaam, lb.*
je wilt alleen de kolom "gebruikersnaam" van de tabel leden hebben, en alle gegevens (*) van leden_berichten
FROM leden l, leden_berichten lb
je gebruikt voor de tabellen leden en leden_berichten respectievelijk de aliassen (verkorte schrijfwijzen) "l" en "lb"
WHERE lb.van = l.id
dit statement geeft aan hoe je de twee tabellen aan elkaar hangt
AND lb.id = $id
dit is een extra conditie waaraan de query-resultaten dienen te voldoen
AND lb.naar = $_SESSION['gid']
dit is ook een extra conditie waaraan de query-resultaten dienen te voldoen
<?php $id = $_GET['id'];
// met een $-teken voor select!!
$select = "SELECT l.gebruikersnaam, lb.* FROM leden l, leden_berichten lb WHERE lb.van = l.id AND lb.id = ".$id." AND lb.naar = ".$_SESSION['gid'];
if (!$sql = mysql_query($select))
{
<?php$id=$_GET['id'];
// met een $-teken voor select!!
$select="SELECT l.gebruikersnaam, lb.* FROM leden l, leden_berichten lb WHERE lb.van = l.id AND lb.id = ".$id." AND lb.naar = ".$_SESSION['gid'];
<? $sql = mysql_query("SELECT leden.gebruikersnaam, leden.id, leden_berichten.* FROM leden, leden_berichten WHERE leden_berichten.naar = ".$_SESSION['gid']." ORDER BY leden_berichten.id DESC");
while ($rij = mysql_fetch_assoc($sql)){
$kleur = ($i++ % 2) ? '#F1F3F5' : '#DEE2E7';
$berichtid = ($rij["id"]);
$van = ($rij["van"]);
$gelezen = ($rij["gelezen"]);
$datum = ($rij["datum"]);
//$sql_van = mysql_query("SELECT (gebruikersnaam) FROM `leden` WHERE id = ".$van."") or die(mysql_error());
//$rij_van = mysql_fetch_assoc($sql_van);
//$van_naam = ($rij_van['gebruikersnaam']);?>
<?$sql=mysql_query("SELECT leden.gebruikersnaam, leden.id, leden_berichten.* FROM leden, leden_berichten WHERE leden_berichten.naar = ".$_SESSION['gid']." ORDER BY leden_berichten.id DESC");