echoen uit een sql query met meerdere joins
ik heb een probleem, en dit probleem is wel het volgende
ik moet gegevens uit 3 tabbellen halen en later weergeven in mijn script nu weet ik niet of mijn query op de juiste manier is opgebouwd en of ik de gegevens op de juiste maniet echo
alvast bedankt
Toevoeging op 04/02/2013 10:31:38:
btw vergeet mijn script toe te voegen :)
$row=Database::execute('SELECT profile.user_id,profile.voornaam,profile.tussenvoegsel,profile.achternaam FROM profile
INNER JOIN profile_bedrijf ON profile.user_id=profile_bedrijf.user_id
INNER JOIN function ON profile_bedrijf.functie_id=function.id ORDER BY profile.voornaam');
$count=count($row);
$i=1;
echo 'playlist: [ ';
foreach($row as $item){
echo'
{
"title":"'.$item['profile.voornaam'].' '.$item['profile.tussenvoegsel'].' '.$item['profile.achternaam'].'",
"description": "what a massive and unbelievable winter we\'re having!",
"image":"'.settings::$url.'/uploaded/avatar//'.$item['user_id'].'_'.strtolower($item['profile.voornaam']).'.png",
"link":"'.settings::$url.'/nl/default/profile/'.$item['profile.user_id'].'"
}';
if($i < $count ){
echo',';
$i++;
}
}
echo '],';
Gewijzigd op 04/02/2013 10:32:36 door Ralph van der Tang
Een echo kan je gewoon doen op de kolom naam, de tabelnaam moet je er niet bij doen. Dus niet $item['profile.voornaam'], maar $item['voornaam'].
$row=Database::execute('SELECT
profile.user_id,
profile.voornaam,
profile.tussenvoegsel,
profile.achternaam
FROM profile
INNER JOIN
profile.user_id=profile_bedrijf.profile_id
INNER JOIN
profile_bedrijf.profile_id=function.id
ORDER BY voornaam');
Mvg ralph
Maar waarschijnlijk moet het gewoon een variabele zijn die je maakt:
En dan moet de regel die jij aangeeft worden:
Gewijzigd op 04/02/2013 11:48:32 door Ivo Breeden
database is een class die automatisch wordt ingeladen
Gewijzigd op 04/02/2013 11:51:57 door ralph van der Tang
Verder gaande hierop, weet je zeker dan die join voorwaarden goed zijn:
Code (php)
1
2
3
4
2
3
4
INNER JOIN
profile.user_id=profile_bedrijf.profile_id
INNER JOIN
profile_bedrijf.profile_id=function.id
profile.user_id=profile_bedrijf.profile_id
INNER JOIN
profile_bedrijf.profile_id=function.id
profile_bedrijf.profile_id is nu namelijk gelijk gesteld aan zowel user_id als functie_id, dat lijkt me enigszins opmerkelijk...
Gewijzigd op 04/02/2013 11:56:05 door Erwin H
en zonder de innerjoins werkt deze query prima
Ralph van der Tang op 04/02/2013 11:56:01:
de joins gebruik ik nu wel moet gegevens uit de andere tabellen halen en deze laten echoen in een json file
en zonder de innerjoins werkt deze query prima
en zonder de innerjoins werkt deze query prima
1) waarom selecteer je dan niets uit de gejoinde tabellen?
2) zonder de inner joins gaat het prima, dat begrijp ik. Alleen je doet het met inner joins en ik begin te denken dat je de kenmerken van een inner join niet goed kent.
Toevoeging op 04/02/2013 12:03:56:
dit is de query nu:
$row=Database::execute('SELECT
profile.user_id,
profile.voornaam,
profile.tussenvoegsel,
profile.achternaam,
profile_bedrijf.bedrijf_id,
profile_bedrijf.bedrijf_naam,
funtion.name_nl
FROM profile
INNER JOIN
profile.user_id=profile_bedrijf.profile_id
INNER JOIN
profile_bedrijf.function_id=function.id
ORDER BY voornaam');
Dan de verschillende joins. Er zijn er meer, maar je zal het meeste werken met INNER JOIN en LEFT JOIN. Het belangrijkste verschil ertussen is dat een INNER JOIN alleen rijen selecteert als er een rij bestaat in de linker en de rechter tabel. LEFT JOIN daarintegen selecteert altijd uit de linker tabel en plaatst er de gegevens bij uit de rechter tabel als die bestaan, of NULL als ze niet bestaan.
Voorbeeld:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
Tabel 'linker':
linker_id rechter_id
1 1
2 2
Tabel 'rechter':
rechter_id naam
1 'iets'
linker_id rechter_id
1 1
2 2
Tabel 'rechter':
rechter_id naam
1 'iets'
Er is dus maar 1 record in de rechter tabel. Join je deze tabellen nu met een INNER JOIN dan krijg je dit:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
SELECT linker_id, naam
FROM linker
INNER JOIN rechter ON linker.rechter_id = rechter.rechter_id;
//results:
linker_id naam
1 'iets'
FROM linker
INNER JOIN rechter ON linker.rechter_id = rechter.rechter_id;
//results:
linker_id naam
1 'iets'
Doe je het via een LEFT JOIN dan krijg je dit:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
SELECT linker_id, naam
FROM linker
LEFT JOIN rechter ON linker.rechter_id = rechter.rechter_id;
//results:
linker_id naam
1 'iets'
2 NULL
FROM linker
LEFT JOIN rechter ON linker.rechter_id = rechter.rechter_id;
//results:
linker_id naam
1 'iets'
2 NULL
Gewijzigd op 04/02/2013 12:06:50 door Erwin H
Toevoeging op 04/02/2013 13:45:27:
het is opgelost
database is een chaos (nederlands en engels door elkaar) en er zat een typfoutje in.
query is nu als volgt:
$row=Database::execute('SELECT
profile.user_id,
profile.voornaam,
profile.tussenvoegsel,
profile.achternaam,
profile_bedrijf.bedrijf_id,
profile_bedrijf.bedrijf_naam,
function.name_nl
FROM profile
LEFT JOIN profile_bedrijf ON
profile_bedrijf.profile_id=profile.profile_id
LEFT JOIN function ON
function.id=profile_bedrijf.functie_id
ORDER BY voornaam');