Left Join of meerdere query's?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Roy Bongers

Roy Bongers

07/07/2006 20:01:00
Quote Anchor link
Ik ben bezig met een blog. Ik heb een artikelen en een reacties tabel. Je kan de resulaten op 2 manieren ophalen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?
while ($var mysql_fetch_array($res_artikelen))
{

    // artikel
    $sql = "SELECT * FROM comments WHERE art_id = ". $var['art_id'];
    while ($var mysql_fetch_array($res_comments)
   {

       // commentaar
   }
}

?>


of met een left join query.

Voordelen van methode 1:
- Logischere code
Nadelen:
- Meerdere query's -> resources / tijd

Voordelen methode 2:
- 1 query
Nadelen:
- Minder logische code
- Veel dubbele data

Bij methode 2 krijg je dus voor elke reactie ook het complete artikel terug. Dus als je dan 30 reacties hebt op 5 artikelen dan haal je dus 25x een dubbel artikel op.

Welke methode heeft de voorkeur volgens jullie en waarom?
Gewijzigd op 01/01/1970 01:00:00 door Roy Bongers
 
PHP hulp

PHP hulp

22/12/2024 09:31:08
 
Snotty

snotty

07/07/2006 20:34:00
Quote Anchor link
Ik ken niet zoveel over LEFT JOIN ed maar ik denk dat in dit geval methode 1 het beste is. Je moet wel meerdere query's uitvoeren, maar dit gaat sneller (en efficienter) dan één query uit te voeren en teveel informatie te moeten versturen over de verbinding.

Als je bij methode 2 dubbele data hebt, moet je deze er nog uitfilteren (als je een array gebruikt, zou je dan bv. array_unique() daarvoor kunnen gebruiken).

Verder nog een kleine opmerking ivm

"SELECT * FROM comments WHERE art_id = ". $var['art_id'];

het is efficienter om de kolommen te bepalen waarvan je gegevens wilt, ook al wil je ALLE gegevens, toch is dat sneller dan *.


// edit: ik ben beginner :D
Gewijzigd op 01/01/1970 01:00:00 door snotty
 
Roy Bongers

Roy Bongers

07/07/2006 21:19:00
Quote Anchor link
Nou die dubbele data blijft op de server. Die gaat niet naar de browser toe. En array_unique gaat daar niet werken denk ik. Ik weet hoe ik 't op wil lossen maar de vraag is welke methode beter is :) .
 
Klaasjan Boven

Klaasjan Boven

07/07/2006 22:24:00
Quote Anchor link
Ik ben het niet met Snotty eens waarom denk je dat de LEFT JOIN uitgevonden is? En er zijn trouwens nog wel meer JOIN typen. Mijn mening is dat je niet met PHP moet doen wat ook met MYSQL kan. Bovendien gok ik als ik je code zo zie dat dit ook moet kunnen:
SELECT a.artikel_id, a.artikel, b.comments
FROM artikelen a,
comments b
WHERE a.artikelen_id=b.artikel_id.

Maar dat is een pure gok. Gebruik sowieso de * niet altijd de velden benoemen is gewoon sneller
 
Rob

Rob

07/07/2006 22:30:00
Quote Anchor link
@klaasjan:

Quote:
Gebruik sowieso de * niet altijd de velden benoemen is gewoon sneller
Niet altijd ;-) Als je alle velden nodig hebt (en als dat er 10000 zijn) kan je beter * gebruiken dan alle velden intypen, dat scheelt aardig wat typwerk :D Maar als je er 2 van de 10000 nodig hebt, kan je inderdaad beterde velden benoemen, ja.
 
Klaasjan Boven

Klaasjan Boven

07/07/2006 22:36:00
Quote Anchor link
Volgens mij heeft Jan Koehoorn eens aangetoond dat, zelfs al gebruik je alles, benoemen altijd een sneller query oplevert. En ik zou persoonlijk niet kunnen bedenken wat er in een tabel met 1000 velden zou moeten staan
 
Roy Bongers

Roy Bongers

07/07/2006 22:51:00
Quote Anchor link
Klaasjan:
SELECT a.artikel_id, a.artikel, b.comments
FROM artikelen a,
comments b
WHERE a.artikelen_id=b.artikel_id.


En als er nu 0 comments zijn dan krijg ik mijn artikel ook niet te zien :) . Een normale join werkt dus niet! Maar wat je dus krijgt met de left join is dit:

// while loop
array (
[artikel_id] => 10
[artikel] => bla bla bla bla bla bla bla
[reactie] => super!
)
array (
[artikel_id] => 10
[artikel] => bla bla bla bla bla bla bla
[reactie] => Mooi man!
)
array (
[artikel_id] => 10
[artikel] => bla bla bla bla bla bla bla
[reactie] => Cool!
)
array (
[artikel_id] => 11
[artikel] => test test test test test test
[reactie] => mmhz dat is minder!
)
// eind loop

Veel te veel dubbele data dus.

Resultaten van Jan btw:
http://www.jankoehoorn.nl/?pag=4
Gewijzigd op 01/01/1970 01:00:00 door Roy Bongers
 
Klaasjan Boven

Klaasjan Boven

07/07/2006 22:53:00
Quote Anchor link
Ik wou net gaan reageren. Inderdaad de "normale"join zal niet werken ook omdat er ook meerdere comments zijn op een artikel.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.