Left Join of meerdere query's?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
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
}
}
?>
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
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
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 :) .
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
Quote:
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.Gebruik sowieso de * niet altijd de velden benoemen is gewoon sneller
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
Klaasjan:
SELECT a.artikel_id, a.artikel, b.comments
FROM artikelen a,
comments b
WHERE a.artikelen_id=b.artikel_id.
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
Ik wou net gaan reageren. Inderdaad de "normale"join zal niet werken ook omdat er ook meerdere comments zijn op een artikel.