Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

Gebruik van LEFT JOIN en WHERE in dezelfde query

Pagina: 1
Acties:
  • 244 views

  • kvdd
  • Registratie: Oktober 2004
  • Laatst online: 30-01 09:37
Beste allemaal,

Allereerst zal ik de situatie uitleggen:

Ik heb 4 tabellen:

1) login <- Gebruikerstabel
code:
1
2
3
|u_id | u_loginnaam | u_voornaam | u_achternaam | 
| 1   | jaapk       | Jaap       | Karels       |
| 2   | manager     | Kees       | Klaassen     |



2) locaties <- Locatie van de gebruiker
code:
1
2
|loc_id| loc_naam | loc_plaats | 
| 1    | Beverly  | Amsterdam  |



3) permissies <- Permissie tabel voor verschillende permissies van de gebruiker
code:
1
2
3
|perm_id | perm_naam| 
| 1      | Gebruiker| 
| 2      | Manager  |


4) managed <- Hierin staat welke gebruikers de manager heeft
code:
1
2
|m_id |m_manager| m_uid |
| 1   | 2       | 1     |

Zoals je dus ziet in bovenstaande manager met u_id 2 heeft u_id 1 in beheer!

Situatie:
Manager logt in, er wordt een sessie aangemaakt, waarin ook het u_id van die manager staat. Deze wordt in SHA1 hash variable $ses_uid gezet.

Nu wil ik met de volgende query:


MySQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 <?php
SELECT 
  l.u_loginnaam, 
  l.u_voornaam, 
  l.u_achternaam, 
  p.perm_naam, 
  loc.loc_naam 
FROM 
  login AS l 
    LEFT JOIN permissies AS p ON l.u_permissie = p.perm_id 
    LEFT JOIN locaties AS loc ON l.u_locatie = loc.loc_id 
WHERE 
  managed AS m SHA1(m.m_manager) = '".$ses_uid."' 
?>  



Het gevolg is dat alle gebruikers, dus ook de gebruikers die de manager niet in zijn beheer heeft, dubbel weergegeven worden.

Ik weet zeker dat ik een beste fout maak, maar heb geen idee welke. Een groot aantal combinaties in de bovenstaande query (zoals de WHERE eerder in de query enz.) heb ik al geprobeerd, maar helaas.

Iemand enig idee, of hint?

  • Dido
  • Registratie: Maart 2002
  • Laatst online: 18:38

Dido

heforshe

Je selecteert iets uit drie tabellen en noemt dan in de where opeens een vierde tabel. Wat denk je dat je daarmee probeert te bereiken?

Wat betekent mijn avatar?


  • Xcalibur
  • Registratie: Augustus 2002
  • Laatst online: 20:28
moet dat niet gewoon met een INNER JOIN ipv een LEFT JOIN ?

Designer | Developer | Director | Photographer | LARPer | Geek | Male | 39


  • whoami
  • Registratie: December 2000
  • Laatst online: 13:42
Iemand enig idee, of hint?
Een SQL tutorial of boek eens doornemen ? (Zie wat Dido zegt).

Je krijgt hier gewoon een syntax error, en het eerste wat je dan moet doen -als je echt niet weet wat er mis is- is een syntax guide oid er bij nemen, en zien of je de basis-syntax wel snapt / weet.

Zorg er ook voor dat je niet onnodig gebruik maakt van outer joins (die left joins in jouw query). Outer joins performen nl. minder dan outer joins, dus gebruik ze enkel als je weet dat je ze echt nodig hebt.
Hoedanook, neem even de tijd om de syntax van een SELECT query te bestuderen.

https://fgheysels.github.io/


Dit topic is gesloten.