Mysqli join vraag

Stel hier je vragen met betrekking tot PHP, MySQL, HTML, CSS en JavaScript.
Forumregels
Check eerst even onze handleiding (http://help.antagonist.nl/) voordat je hier je vraag stelt. Voor de meeste problemen hebben we een oplossing met een zeer uitgebreide uitleg.
Plaats reactie
bvanenk
Berichten: 13
Lid geworden op: 19 jan 2009, 23:03

Mysqli join vraag

Bericht door bvanenk » 29 mar 2018, 12:33

Goedemiddag,

Ik heb een vraag over een query die ik nu gebruik. Het leverde voorheen precies op wat ik nodig had alleen door een uitbreiding van de data krijg ik nu niet altijd het gewenste resultaat.

Met de query haal ik namen op van personen uit tabel A. Met een id van de persoon en een dag id kijk ik in tabel B of er een match is. Daarnaast kijk ik of bij deze twee matchen een match is in een derde tabel C. Deze worden dan bij elkaar weergegeven.

Nu is het zo dat in tabel B twee matchen kunnen zijn en ook in tabel C. Nu krijg ik dan vier rijen te zien. Eigenlijk wil ik maar twee rijen hebben.

Ik heb nu de volgende query:

Code: Selecteer alles

"SELECT 
    persoon.voornaam, 
    persoon.achternaam, 
    persoon.id AS personid, 
    werkdag.tijdstart AS werkdagbegin, 
    werkdag.tijdstop AS werkdageinde, 
    werkdag.id AS werkdagid, 
    inklokken.tijd_start AS inklokbegin, 
    inklokken.tijd_stop AS inklokeinde, 
    inklokken.id AS inklokid,
    inklokken.pauze AS pauze,
    inklokken.eten AS eten
FROM 
    persoon 
LEFT JOIN
    werkdag ON ((werkdag.persoon_id = persoon.id) AND (werkdag.dag_id = '".$dag_id."')) 
LEFT JOIN 
    inklokken ON ((inklokken.persoon_id = persoon.id) AND (inklokken.dag_id = '".$dag_id."'))  
WHERE 
    werkdag.tijdstop != '0' OR inklokken.tijd_stop != '0' 
GROUP BY
    werkdagid
ORDER BY 
    persoon.voornaam, inklokbegin
ASC";
Hoe moet ik te werk gaan om de jusite match bij elkaar weer te geven op twee rijen?

Ik hoop dat één van jullie mij verder kan helpen.

Alvast hartelijk dank.

Groeten Bob.

Reno
Berichten: 100
Lid geworden op: 22 jan 2010, 18:25

Re: Mysqli join vraag

Bericht door Reno » 02 apr 2018, 12:29

Goedemiddag,

Ik heb even geen testomgeving om dit snel te testen, maar ik vroeg me af waarom je een "where"-clausule in je left join zet. Ik zou dit eerder zou regelen (indien dat werkt - correct me if I am wrong).

Code: Selecteer alles

"SELECT 
    persoon.voornaam, 
    persoon.achternaam, 
    persoon.id AS personid, 
    werkdag.tijdstart AS werkdagbegin, 
    werkdag.tijdstop AS werkdageinde, 
    werkdag.id AS werkdagid, 
    inklokken.tijd_start AS inklokbegin, 
    inklokken.tijd_stop AS inklokeinde, 
    inklokken.id AS inklokid,
    inklokken.pauze AS pauze,
    inklokken.eten AS eten
FROM 
    persoon 
LEFT JOIN
    werkdag ON werkdag.persoon_id = persoon.id
LEFT JOIN 
    inklokken ON inklokken.persoon_id = persoon.id
WHERE 
    werkdag.dag_id = '".$dag_id."' AND inklokken.dag_id = '".$dag_id."' AND (werkdag.tijdstop != '0' OR inklokken.tijd_stop != '0')
GROUP BY
    werkdagid
ORDER BY 
    persoon.voornaam, inklokbegin
ASC";

Plaats reactie