echoen uit een sql query met meerdere joins

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ralph van der Tang

ralph van der Tang

04/02/2013 10:30:55
Quote Anchor link
hoi iedereen

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
 
PHP hulp

PHP hulp

27/04/2024 02:36:28
 
Erwin H

Erwin H

04/02/2013 11:21:25
Quote Anchor link
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'].
 
Ralph van der Tang

ralph van der Tang

04/02/2013 11:37:47
Quote Anchor link
het werkt nog steeds niet dat moet dan aan mijn query liggen iemand een idee waarom dit niet werkt
$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
 
Ivo Breeden

Ivo Breeden

04/02/2013 11:46:39
Quote Anchor link
Ja maar wat een rare constructie is dat. Wat is Database? Zoals het er staat kan het een class zijn die je zelf hebt gemaakt en die waarschijnlijk een PDO of MySQLi extends.
Maar waarschijnlijk moet het gewoon een variabele zijn die je maakt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$database
=  new PDO($connectstring, $user, $password);
?>

En dan moet de regel die jij aangeeft worden:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$row
=  $database->execute('SELECT ...');
?>
Gewijzigd op 04/02/2013 11:48:32 door Ivo Breeden
 
Ralph van der Tang

ralph van der Tang

04/02/2013 11:51:03
Quote Anchor link
databasse::execute werkt zoals het hoort te werken

database is een class die automatisch wordt ingeladen
Gewijzigd op 04/02/2013 11:51:57 door ralph van der Tang
 
Erwin H

Erwin H

04/02/2013 11:54:29
Quote Anchor link
Dan is de vraag, krijg je uberhaupt wel records terug uit je query? Eerder wilde ik al vragen waarom je die joins gebruikt, aangezien je niets doet met de gegevens uit de gejoinde tabellen. Ik stelde de vraag echter niet, omdat je INNER JOINS gebruikt, wat erop kan wijzen dat je de joins nodig hebt om bepaalde records juist niet te selecteren. Maar daar kan dus ook je probleem zitten. Door die joins kan het zijn dat er geen enkel record meer wordt geselecteerd en dan kan je echoen tot je een ons weegt.... maar je zal niets te zien krijgen.

Verder gaande hierop, weet je zeker dan die join voorwaarden goed zijn:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
INNER JOIN
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
 
Ralph van der Tang

ralph van der Tang

04/02/2013 11:56:01
Quote Anchor link
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
 
Erwin H

Erwin H

04/02/2013 11:57:35
Quote Anchor link
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

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.
 
Ralph van der Tang

ralph van der Tang

04/02/2013 11:59:13
Quote Anchor link
dat zo zomaar kunnen is de 1e x dat ik er mee werk


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');
 
Erwin H

Erwin H

04/02/2013 12:05:25
Quote Anchor link
OK, kijk eerst nog even naar de join voorwaarden zoals ik boven laat zien. Ik denk dat je links niet goed zijn.

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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
Tabel 'linker':
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)
PHP script in nieuw venster Selecteer het PHP script
1
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'

Doe je het via een LEFT JOIN dan krijg je dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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
Gewijzigd op 04/02/2013 12:06:50 door Erwin H
 
Ralph van der Tang

ralph van der Tang

04/02/2013 12:06:50
Quote Anchor link
ok dank voor de hulp ik ga weer ff kijken of ik er nu wel uit kan komen


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');
 



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.