MySQL query

Gestart doorTimkb12 reacties91 weergaven

13 berichten · pagina 1 van 1

Timkb

Lid · Topicstarter

Berichten
4.214
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Ik zit vast met een MySQL query, LEFT JOIN pakt zoals ik al had verwacht ook alle records van de tabel berichten_gelezen ongeacht of er een match is in de tabel berichten. Wat ik wil is enkel de berichten selecteren die voor de gebruiker, het uid moet 0 zijn (berichten aan alle gebruikers) of het persoonlijke uid. Wat hij nu echter doet is deze check in de query compleet negeren door de LEFT JOIN, ik heb echter geen idee hoe ik dit kan oplossen, INNER JOIN gaat niet werken omdat er niet altijd een record is in de tabel berichten_gelezen, deze komt er pas in zodra het bericht gelezen is.

Dit is de query tot nu toe, hopelijk weet iemand een oplossing.

SELECT b.id,b.titel,b.bericht,b.datum,g.id AS gelezen FROM berichten b LEFT JOIN berichten_gelezen g ON b.id = g.bid AND b.uid IN(0, 123)
0
Berichten
14.025
Reputatie
1
Punten
0,01
Lid sinds
Laatst gezien
Met de WHERE clause?
0
Timkb

Lid · Topicstarter

Berichten
4.214
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Dylanh schreef:
Met de WHERE clause?
Zit er in AND b.uid IN(0, 123) de left join negert deze.
0
Berichten
93.699
Reputatie
0
Punten
1,27
Lid sinds
Laatst gezien
Timkb schreef:
Eerdere citaten tonen
Dylanh schreef:
Met de WHERE clause?
Zit er in AND b.uid IN(0, 123) de left join negert deze.
En als je het ín de join zet? ON uid IN(0,123) ?
0
Timkb

Lid · Topicstarter

Berichten
4.214
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Xjessex schreef:
Eerdere citaten tonen
Timkb schreef:
Eerdere citaten tonen
Dylanh schreef:
Met de WHERE clause?
Zit er in AND b.uid IN(0, 123) de left join negert deze.
En als je het ín de join zet? ON uid IN(0,123) ?
Kan het nu even niet proberen maar kun je in de ON twee dingen zetten? b.id = g.bid en b.uid IN (0, 123)? b.uid IN (0, 123) heeft namelijk niets met het binden van de twee tabellen te maken.
0
Berichten
93.699
Reputatie
0
Punten
1,27
Lid sinds
Laatst gezien
Als tijdens het binden alle gegevens (ongeacht IN(0, 213) ) opgehaald moeten worden dan is het niet handig om het in ON te zetten, dan zou het gewoon in de WHERE clause moeten staan.

Maar je kan wel ON a.a=b.a AND b.a=a.a gebruiken (dus twee statements voor ON) (of meer)
0
Timkb

Lid · Topicstarter

Berichten
4.214
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Xjessex schreef:
Als tijdens het binden alle gegevens (ongeacht IN(0, 213) ) opgehaald moeten worden dan is het niet handig om het in ON te zetten, dan zou het gewoon in de WHERE clause moeten staan.

Maar je kan wel ON a.a=b.a AND b.a=a.a gebruiken (dus twee statements voor ON) (of meer)
Het probleem is dat er niet altijd een record in de tabel berichten_gelezen staat (het bericht is misschien nog niet geopend) met een LEFT JOIN krijg ik dan een NULL (wat de bedoeling is).
0
Rik

Lid

Berichten
18.393
Reputatie
0
Punten
0,04
Lid sinds
Laatst gezien
Je koppelt eerst de tabellen (left join ... On ...). Het is hierbij belangrijk dat de tabel waar je alle gegevens van wil (de gebruiker) links staan. Dit heb je correct gedaan. Je koppelt de gebruiker aan de tabel die rechts staat, dit kan echter ook een null zijn als er geen rows worden gevonden zoals je al zei. Daarna wil je daarin bepaalde rows ophalen met een bepaalde userid. Dit doe je dus zoals gezegd is door de AND te vervangen met WHERE.
0
Berichten
14.025
Reputatie
1
Punten
0,01
Lid sinds
Laatst gezien
De ON is toch bedoeld om de kolomen met elkaar te verbinden
0
Timkb

Lid · Topicstarter

Berichten
4.214
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Rik schreef:
Je koppelt eerst de tabellen (left join ... On ...). Het is hierbij belangrijk dat de tabel waar je alle gegevens van wil (de gebruiker) links staan. Dit heb je correct gedaan. Je koppelt de gebruiker aan de tabel die rechts staat, dit kan echter ook een null zijn als er geen rows worden gevonden zoals je al zei. Daarna wil je daarin bepaalde rows ophalen met een bepaalde userid. Dit doe je dus zoals gezegd is door de AND te vervangen met WHERE.
Ik wil niet uit de "rechter" kolom het uid selecteren maar uit de linker (of bedoel jij dat ook?). Wist overigens niet dat WHERE in een JOIN kon, dacht altijd dat dat zou resulteren in een fout (wat overigens erg krom klinkt nu ik er over nadenk)

Zal straks eens WHERE proberen.
Dylanh schreef:
De ON is toch bedoeld om de kolomen met elkaar te verbinden
Yep, dat is ook exact wat ik wil. Ik wil dat de query kijkt of het bericht gelezen is, als dat zo is dan is er een record in de berichten_gelezen tabel.
0
Rik

Lid

Berichten
18.393
Reputatie
0
Punten
0,04
Lid sinds
Laatst gezien
Timkb schreef:
Eerdere citaten tonen
Rik schreef:
Je koppelt eerst de tabellen (left join ... On ...). Het is hierbij belangrijk dat de tabel waar je alle gegevens van wil (de gebruiker) links staan. Dit heb je correct gedaan. Je koppelt de gebruiker aan de tabel die rechts staat, dit kan echter ook een null zijn als er geen rows worden gevonden zoals je al zei. Daarna wil je daarin bepaalde rows ophalen met een bepaalde userid. Dit doe je dus zoals gezegd is door de AND te vervangen met WHERE.
Ik wil niet uit de "rechter" kolom het uid selecteren maar uit de linker (of bedoel jij dat ook?). Wist overigens niet dat WHERE in een JOIN kon, dacht altijd dat dat zou resulteren in een fout (wat overigens erg krom klinkt nu ik er over nadenk)

Zal straks eens WHERE proberen.
Eerdere citaten tonen
Dylanh schreef:
De ON is toch bedoeld om de kolomen met elkaar te verbinden
Yep, dat is ook exact wat ik wil. Ik wil dat de query kijkt of het bericht gelezen is, als dat zo is dan is er een record in de berichten_gelezen tabel.
Ja, dat is wat ik bedoelde yummie
0
Timkb

Lid · Topicstarter

Berichten
4.214
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
WHERE werkt perfect, weer wat geleerd. Geen idee waar ik de gedachten vandaan had dat WHERE niet kon in een JOIN, achteraf klinkt het ook erg knullig dat dat niet zou kunnen.
0
Berichten
14.025
Reputatie
1
Punten
0,01
Lid sinds
Laatst gezien
Had ik toch gelijkbloos
0

Jouw reactie

Deel je idee, stel een vraag of help een ander verder.

Editor laden…

Praat mee met de One2xs-community.

Inloggen om te reageren