[SQL] probleempje met JOIN en WHERE

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • NielsNL
  • Registratie: Januari 2002
  • Laatst online: 08-09 20:14
Geïnspireerd door Crisp's blog en omdat ik wel eens ben uitgekeken op meerdere subquery's binnen PHP. Ben ik aan het proberen om met een join uit 2 tabellen een menu te maken voor m'n cms.
tabel 1, pages:
code:
1
2
3
4
name
menustatus
dir_id
site

tabel 2, pages_dirs:
code:
1
2
3
name
menustatus
site

Ik heb de tabellen vereenvoudigd.
En met de volgende query probeer ik ze samen te voegen, de 5 is $userrang de 9 is $siteid
SQL:
1
2
3
4
5
6
7
8
SELECT pages.menustatus AS pagestatus, pages.name AS pagename, 
pages_dirs.menustatus AS dirstatus, pages_dirs.name AS dirname
FROM pages_dirs LEFT JOIN pages ON pages.dir_id = pages_dirs.id 
WHERE (pages_dirs.site = 9 OR pages.site = 9) 
AND (pages_dirs.menustatus <= 5 
 OR (pages.menustatus = NULL OR pages.menustatus <= 5)
)
ORDER BY pages_dirs.menuposition, pages.menuposition

Wat resulteerd in deze set:
code:
1
2
3
4
5
6
pagestatus  pagename    dirstatus   dirname
10  home    0   home
10  Leeg    0   home
NULL    NULL    0   nieuws
NULL    NULL    0   weblog
NULL    NULL    0   gastenboek

Echter omdat de pagina's "home" en "Leeg" status 10 hebben, zou ik alleen 1 maal de map home willen hebben. Maar als ik de OR op regel 7 verander in een AND, krijg ik een lege set terug.
Nu is dit voor mij de eerste keer dat ik met een JOIN werk, en zie even door het bos de bomen niet meer. :+

M'n Oma is een site aan het haken.


Acties:
  • 0 Henk 'm!

  • StevenK
  • Registratie: Februari 2001
  • Laatst online: 20-09 16:45
Wat is de inhoud van je tabellen?

Was advocaat maar vindt het juridische nog steeds leuk


Acties:
  • 0 Henk 'm!

  • PeetR
  • Registratie: Februari 2002
  • Laatst online: 13-09 22:20
Kijk eens naar de positie van je haakjes; heb het idee dat het daar niet helemaal goed gaat.

Your time as a student is the best time of your life


Acties:
  • 0 Henk 'm!

  • cariolive23
  • Registratie: Januari 2007
  • Laatst online: 18-10-2024
pages.menustatus = NULL lijkt mij ook niet goed te zijn, NULL kan namelijk onmogelijk gelijk zijn aan NULL. NULL geeft aan dat er geen bekende waarde aanwezig is. Iets wat niet bekend is, kun je dus ook niet gaan vergelijken met iets anders wat niet bekend is.

Gebruik IS NULL of IS NOT NULL wanneer je wilt "vergelijken" met NULL.

De query even netjes uitschrijven wil ook nog wel eens helpen bij het fixen van bugs, fouten ontstaan door gebrek aan overzicht.

Acties:
  • 0 Henk 'm!

  • NielsNL
  • Registratie: Januari 2002
  • Laatst online: 08-09 20:14
cariolive23 schreef op vrijdag 29 mei 2009 @ 09:24:
pages.menustatus = NULL lijkt mij ook niet goed te zijn, NULL kan namelijk onmogelijk gelijk zijn aan NULL. NULL geeft aan dat er geen bekende waarde aanwezig is. Iets wat niet bekend is, kun je dus ook niet gaan vergelijken met iets anders wat niet bekend is.

Gebruik IS NULL of IS NOT NULL wanneer je wilt "vergelijken" met NULL.

De query even netjes uitschrijven wil ook nog wel eens helpen bij het fixen van bugs, fouten ontstaan door gebrek aan overzicht.
IS i.p.v. = is inderdaad de truuk. Weer wat geleerd.
Ik had al geprobeerd om 'm netter uit te schrijven, maar dit is voor het eerst dat ik een "lange" query bouw.
Zou je 'm eens netjes uit willen schrijven, want ik zou niet weten hoe het beter moet dan ik al heb...

M'n Oma is een site aan het haken.