Hallo,

Kan iemand me op weg helpen. Ik probeer gegevens uit 3 tabellen te krijgen. Dan wel verdeeld in meerdere rijen. Ik krijg nu alles in 1 rij terug. Kan ik iemand me vertellen wat ik fout doen.

-----voorbeeld
tabel users
id

tabel autos
id
users_id

tabel fiets
id
users_id
--------Als krijg k nu alles in 1 rij.

$sql="select * from (users left join lift on users.id = lift.user_id) left join advertenties on users.id = advertenties.user_id";

bvd
omdat je alles opvraagt in 1 query, je kan dit over meerdere queryies verdelen of je kan de array opsplitsen
Je gebruikt haakjes op een verkeerde manier.
Afgezien van het feit dat je andere tabellen in je query hebt dan in je voorbeeld.
En het is ook niet zo slim om * te gebruiken in een SELECT (in het algemeen niet maar zeker niet in joins), want hoe ga je straks opvragen in php als je in 3 tabellen dezelfde veldnamen hebt. Je query moet er dus ongeveeer zo uitzien

SELECT
	t1.id AS t1ID,
	t1.name AS t1name,
	t2.id AS t2ID,
	t2.name AS t2Name,
	t3.id AS t3ID,
	t3.name AS t3Name,
FROM
	myusers AS t1
LEFT JOIN
	lift AS t2 ON t1.id = t2.user_id
lEFT JOIN
	advertenties AS t3 ON t1.id = t3.user_id
--hier evntueel nog een WHERE clause
;




Ger van Steenderen op 06/03/2012 21:22:05

Je gebruikt haakjes op een verkeerde manier.
Afgezien van het feit dat je andere tabellen in je query hebt dan in je voorbeeld.
lEFT JOIN
advertenties AS t3 ON t1.id = t3.user_id
--hier evntueel nog een WHERE clause
;



Bedankt voor de reactie. Dit is toch hetzelfde als wat ik had? alleen geef ik de tabellen geen andere naam. Zit daar wel verschil tussen?

Als ik meerdere advertenties heb en bij lift 1 rij, dan werkt het goed. Hoewel ik krijg nog steeds wel 1 regel compleet gevuld, maar wel meerder rijen. Zodra ik 2 rijen in lift tabel heb, gaat het helemaal fout.

Doe ik het fout?Gebruik ik de verkeerde join? normaal doe je select * bla from where en dan met while kan je het per regel gebruiken. Nu word bij elke regel ook de lift gegevens ingevuld.


SELECT
    t1.id AS t1ID,
	t1.username as t1Username,
    t2.id AS t2ID,
    t2.datumvertrek AS t2Datumvertrek,
    t2.datumterugreis AS t2Datumaankomst,
    t2.vertrek AS t2Vertrek,
    t2.aankomst AS t2Aankomst,
    t2.via AS t2Via,	
	t2.user_id AS t2Userid,   
    t3.id AS t3ID,
    t3.omschrijving AS t3Omschrijving,
    t3.beschrijving AS t3Beschrijving,
    t3.tekoop AS t3Tekoop,
    t3.prijs AS t3Prijs,
    t3.fotos AS t3Fotos,
   	t3.user_id AS t3Userid
FROM
    users AS t1
LEFT JOIN
    lift AS t2 ON t1.id = t2.user_id
LEFT JOIN
    advertenties AS t3 ON t1.id = t3.user_id
 ORDER BY RAND() LIMIT 4

Het ligt eraan wat je wilt joinen. Anders gezegd wat wil je koppelen?
Je bent niet helemaal duideijk wat je wilt: je hebt 3 tabellen maar welke informatie wil je daar uit terugkrijgen?
Mijn bedoeling is:
met 1 query de tabellen lift, advertenties en users uit te lezen dan gekoppeld met user id.

Zodat ik met 1 While lus alles kan doorlopen. Dit geval moeten er uiteindelijk 4 random regels zichtbaar worden. Dat kan dus een lift of een advertentie zijn met de daarbij horende user gegevens.

Aha ik had de LIMIT niet gezien, wat jij wilt moet je met een subquery doen:

SELECT
	userID,
	username,
	datumvertrek,
        --enzovoort
FROM
	(SELECT
		t1.id AS userID,
    		t1.username,
    		t2.id AS liftID,
    		t2.datumvertrek,
    		t2.datumterugreis,
    		t2.vertrek,
    		t2.aankomst,
    		t2.via,
    		t3.id AS addID,
    		t3.omschrijving,
    		t3.beschrijving,
    		t3.tekoop,
    		t3.prijs,
    		t3.fotos
	FROM
    		users AS t1
	LEFT JOIN
    		lift AS t2 ON t1.id = t2.user_id
	LEFT JOIN
    		advertenties AS t3 ON t1.id = t3.user_id)
	AS aView
ORDER BY RAND() LIMIT 4

Je hoeft geen aliassen op kolommen te gebruiken als de kolomnamen verschillen.
Met deze query krijg je trouwens oook de users zonder lift en advertenties.
Reshadd

omdat je alles opvraagt in 1 query, je kan dit over meerdere queryies verdelen of je kan de array opsplitsen

Verklaar je nader aub.
Ik vraag me alleen af of je hier wel een join nodig hebt tussen de tabellen, of eigenlijk een union? Je zegt namelijk "Dat kan dus een lift of een advertentie zijn". Of, niet en.
Wat is het verband tussen de verschillende tabellen? Heb je bij de lift gegevens ook de advertentie gegevens nodig, of altijd alleen maar of de een, of de ander?
Erwin, de twee tabellen zijn totaal verschillend, lijkt mij niet dat je dat met een union kan doen.
Ligt eraan wat de info is die je nodig hebt.
Maar als je geen info uit beide tabellen nodig hebt om een regel te maken op je pagina, dan is een join onzin.
Daar heb je ook gelijk in, de gehele query is onlogisch. Ik denk dat het in dit geval het simpelste is om de querie in tweeen op te splitsen, met een union gaat wel maar dan noeten wel alle kolomtypes gelijk zijn of je moet met virtuele kolommen gaan werken.

Reageren