Archief - MYSQL: Hoe 2 keer dezelfde tabel joinen?

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Mulle

Legacy Member
In mijn vorige topic kreeg ik de tip om met joins te gaan werken om zo wat query's te minderen. Dit lukt allemaal goed. Maar nu heb ik het volgende probleem:

Ik heb een tabel voor mijn forum en daar staan 2 (id's) verwijzingen naar mijn tabel met de leden. Dus ik moet 2 namen uit die tabel met leden halen. Hoe moet ik dit doen?

Ik gebruik momenteel dat stukje code:
PHP:
<?php
//STUKJE CODE VOOR

$result = mysql_query_count("SELECT forum_berichten.id as id, forum_forum.titel as forum_naam, forum_berichten.sticky as sticky, site_niveau.niveau as niveau, forum_berichten.titel as titel, forum_berichten.views as views, forum_berichten.reacties as reacties, forum_berichten.laatste_bericht_datum as laatste_bericht_datum, leden.naam as user, leden.id as user_id, forum_berichten.laatste_bericht_user_id as laatste_bericht_user_id, forum_forum.login as login FROM forum_forum LEFT JOIN site_niveau ON site_niveau.id = forum_forum.niveau_id LEFT JOIN forum_berichten ON forum_forum.id = forum_berichten.forum_id LEFT JOIN leden ON leden.id = forum_berichten.user_id WHERE forum_forum.id = '".$ForumId."' ORDER BY forum_berichten.sticky ASC, forum_berichten.laatste_bericht_datum DESC") or die (mysql_error());
while($row = mysql_fetch_array($result) AND mysql_num_rows($result) != '0'){
    if(empty($row['login']) ? empty($row['niveau']) ? true : $Login ? beveiligd($LoginNiveau,$row['niveau']) : false : $Login ? empty($row['niveau']) ? beveiligd($LoginNiveau,$row['niveau']) : true : false){
        if($row['sticky'] == '1' AND $Sticky){
            $Navigatie[$row['forum_naam']] = "?pagina=forum&forumid=".$ForumId;
            $Tpl->assign('FORUM_FORUM_NAAM',$row['forum_naam']);

            $Tpl->newBlock('ONDERWERP');
            $Tpl->newBlock('BELANGRIJK');
            $Tpl->assign('ONDERWERPBELANGRIJK',"Belangrijke onderwerpen");

            $Sticky = false;
        }
        elseif(!$Sticky AND $Onderwerpen){
            $Navigatie[$row['forum_naam']] = "?pagina=forum&forumid".$ForumId;
            $Tpl->assign('FORUM_FORUM_NAAM',$row['forum_naam']);

            $Tpl->newBlock('ONDERWERP');
            $Tpl->newBlock('BELANGRIJK');
            $Tpl->assign('ONDERWERPBELANGRIJK',"Forum onderwerpen");

            $Sticky = false;
            $Onderwerpen = false;
        }
        elseif($Onderwerpen){
            $Navigatie[$row['forum_naam']] = "?pagina=forum&forumid".$ForumId;
            $Tpl->assign('FORUM_FORUM_NAAM',$row['forum_naam']);

            $Tpl->newBlock('ONDERWERP');

            $Sticky = false;
            $Onderwerpen = false;
        }

        if(empty($row['titel'])){
            $Tpl->newBlock('BELANGRIJK');
            $Tpl->assign('ONDERWERPBELANGRIJK',"Er zijn nog geen berichten");
        }
        else{
            $Tpl->newBlock('ONDERWERPEN');
            $Tpl->assign('FORUM_ONDERWERP_NAAM',$row['titel']);
            $Tpl->assign('FORUM_ONDERWERP_URL','?pagina=topic&topicid='.$row['id']);

            $Tpl->assign('FORUM_USER',$row['user']);
            $Tpl->assign('FORUM_USER_URL',"?pagina=user&userid=".$row['user_id']);
            $Tpl->assign('FORUM_ONDERWERP_AANTAL_REACTIES',$row['reacties']);
            $Tpl->assign('FORUM_ONDERWERP_AANTAL_VIEWS',$row['views']);
            $Tpl->assign('FORUM_ONDERWERP_LAATSTE_BERICHT_DATUM',date("d-m-y",$row['laatste_bericht_datum']));
    //        $Tpl->assign('FORUM_ONDERWERP_LAATSTE_BERICHT_POSTER',$row['laatste_bericht_user']);
            $Tpl->assign('FORUM_ONDERWERP_LAATSTE_BERICHT_USER_URL',"?pagina=user&userid=".$row['laatste_bericht_user_id']);
            $Tpl->newBlock('ONDERWERPOPENPOPNEW');
            $Tpl->newBlock('ICON');
            $Tpl->assign('ICONNR','4');
        }
        $Toon = true;
    }
}

//STUKJE CODE NA
?>

Alvast bedankt.

Dece

Legacy Member
gewoon zoals ge 1 tabel zou joinen, alleen moede nu aliassen gaan gebruiken:
Code:
SELECT t.rij as rij1, tt.rij as rij2
FROM de_ids AS d
INNER JOIN tabel AS t ON t.rij_id = d.id
INNER JOIN tabel AS tt ON tt.tij_id = d.id2
btw: dees is al veel defiger qau code en de output is net hetzelfde
Code:
SELECT fb.id as id, ff.titel as forum_naam, fb.sticky, sb.niveau,
     fb.titel, fb.views, fb.reacties, fb.laatste_bericht_datum,
     l.naam as user, l.id as user_id, fb.laatste_bericht_user_id,
     ff.login
     FROM forum_forum AS ff
     LEFT JOIN site_niveau AS sn
          ON sn.id = ff.niveau_id 
     LEFT JOIN forum_berichten AS fb
          ON ff.id = fb.forum_id 
     LEFT JOIN leden AS l
          ON leden.id = fb.user_id 
     WHERE ff.id = '".$ForumId."' 
     ORDER BY fb.sticky ASC, fb.laatste_bericht_datum DESC

Mulle

Legacy Member
Dank u,

Het werkt. :applause:

Ook bedankt voor die tip met dat netter maken. Ziet er een stuk overzichtelijker uit. :)
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan