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
Bedankt voor de reacties.

Ik ben al een stukje wijzer geworden. De gegevens uit de tabellen lift en advertentie hebben relatie met user. Niet met elkaar. Ik zat me blind te staren op de joins, maar nu ik jullie reacties lees word het wat helderder. Nooit over subqueries na gedacht. Met zoeken kwam ik voornamelijk bij de joins terecht.

Als ik het goed heb begrepen koppel je dus de gegevens uit de tabellen met elkaar doormiddel van de left en right join. Daardoor krijg ik dubbele gevevens als resultaat?(1 rij in tabel lift. 3 rijden in tabel ad., bij elke ad met dezelfde user id word lift herhaalt.)

Ik wou zo min mogelijk php gebruiken, maar volgens mij kan ik beter 2 queries draaien met een hogere limit. Vervolgens samen voegen in array daar random 4 uit halen.
Het blijft een beetje onlogisch omdat je twee totaal verschillende tabellen met elkaar wilt verenigen. Maar bijna niets is onmogelijk dus:

SELECT k1, k2, k3, k4, k5, k6, k7, k8, type
FROM
	((SELECT t1.id AS k1, t1.username AS k2, t2.id AS k3,
            CAST(t2.datumvertrek, CHAR) AS k4,
            CAST(t2.datumterugreis, CHAR) AS k5,
            t2.vertrek AS k6,
            t2.aankomst AS k7,
            t2.via AS k8,
	    'lift' AS type
	FROM users AS t1
	JOIN lift AS t1 ON t1.id = t2.user_id)
     UNION
	(SELECT t3.id AS k1, t3.username AS k2, t4.id AS k3,
	    t4.omschrijving AS k4,
            t3.beschrijving AS k5,
            CAST(t3.tekoop, CHAR) as k6,
            CAST(t3.prijs, CHAR) as k7,
            t3.fotos as k8,
	    'add' AS type
	FROM users AS t3
	JOIN advertentie AS t4 ON t1.id = t2.user_id))
	AS t213754
ORDER BY RAND() LIMIT 4

beetje smerig maar zou moeten werken (niet uitgetest)
Ger van Steenderen, dankje.


SELECT k1, k2, k3, k4, k5, k6, k7, k8, type
FROM
    ((SELECT t1.id AS k1, t1.username AS k2, t2.id AS k3,
            t2.datumvertrek AS k4,
            t2.datumterugreis AS k5,
            t2.vertrek AS k6,
            t2.aankomst AS k7,
            t2.via AS k8,
        'lift' AS type
    FROM users AS t1
    JOIN lift AS t2 ON t1.id = t2.user_id)
     UNION
    (SELECT t3.id AS k1, t3.username AS k2, t4.id AS k3,
        t4.omschrijving AS k4,
            t4.beschrijving AS k5,
            t4.tekoop as k6,
            t4.prijs as k7,
            t4.fotos as k8,
        'add' AS type
    FROM users AS t3
    JOIN advertenties AS t4 ON t4.user_id = t3.id))
    AS t213754
ORDER BY RAND() LIMIT 4


Ik heb het bijna werkend//// hoe hoe, het werkt nu. Wat cool, Ik snap alleen de query nog niet helemaal. Ga nu ff de hele query uit pluizen.

Het kan dus wel:), wat is nu verstandiger? PHP en meerdere queries, of een ingewikkelde(voor mij doen) query met union? Ik had gelezen dat Union best wel veel van de server vraagt. Is dat echt merkbaar?
Dat ligt aan de opbouw van je tabel en van je query. Als je goede indices hebt op je tabel dan kan een union bijzonder snel zijn. En vergeet niet dat je aan de andere kant (als je geen union gebruikt) ook twee keer je database aan moet spreken, wat ook weer extra resources vergt. Een simpel antwoord is dus niet te geven, in de trant van "dit of dat is beter", je zal zelf moeten zien hoe het in de praktijk zich houdt.
Er zijn een aantal voorwaarden verbonden aan een union:
- het aantal kolommen moet gelijk zijn
- de kolomnamen moeten hetzelfde zijn

De laatste is op te lossen met aliassen. Ik dacht dat ze ook hetzelfde datatype moesten hebben, maar dat is dus niet zo. Dan is het gelijk een stuk minder smerig :->
Het kan dus wel:), wat is nu verstandiger? PHP en meerdere queries, of een ingewikkelde(voor mij doen) query met union? Ik had gelezen dat Union best wel veel van de server vraagt. Is dat echt merkbaar?

In dit geval vind ik de oplossing met 1 query het beste: als je met 2 queries eerst een aantal rijen gaat ophalen en daarna in php een hoop fratsen uit moet halen om er uiteindelijk maar 4 over te houden is niet zo slim.

Reageren