[MySQL] Menuitems met rechten

Pagina: 1
Acties:
  • 314 views

  • Exception
  • Registratie: Augustus 2006
  • Laatst online: 18-11 16:26
Beste Tweakers,

Ik ben bezig met een menu waarin items worden getoond wanneer er rechten voor zijn.
Ik heb de volgende tabelstructuur:

tbl_menuitems
itemidnaamregel
1algemeenmag_algemeen_bekijken
2websitebewerkenmag_website_bewerken
3facturerenmag_factureren


tbl_regels
regelidregelgebruikersnaamstatus
1mag_algemeen_bekijkenhenk1
2mag_algemeen_bekijkenpiet0
3mag_facturerenhenk1


Nu ben ik bezig met de volgende query:
  • Het menuitem mag getoond worden wanneer er geen regel is ingevoerd in tbl_menuitems.
  • Het menuitem mag getoond worden wanneer er wel een regel is ingevoerd en de status daarvan 1 is en de gebruikersnaam gelijk is aan $_SESSION['username'] in tbl_regels.
Wanneer hij niet voldoet aan de bovenstaande eisen, mag hij niet worden getoond in de php-while-lus.

Wie kan mij helpen met de query? Ik kom er niet uit, want ik moet werken met IF en ELSE in de query waar ik totaal geen ervaring mee heb.

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Wat heeft dit van doen met DTE :?
Waar hoort mijn topic?
DTE >> PRG
Exception schreef op dinsdag 27 mei 2008 @ 12:27:
Ik kom er niet uit, want ik moet werken met IF en ELSE in de query waar ik totaal geen ervaring mee heb.
Dat is toch wel héél basic programmeerwerk. Misschien is het een idee om eens een SQL tutorial door te nemen? Dit is prima op te lossen met een WHERE en een JOIN (leesvoeier: Hoe werken joins?). Kijk ook eens even in onze Programming Beleid Quickstart, want zoals je daar zult lezen mis ik nogal het één en ander in je topic zoals wat je al hebt geprobeerd, wat er niet werkt, (relevante!) code etc. etc.

[ Voor 77% gewijzigd door RobIII op 27-05-2008 12:46 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • MueR
  • Registratie: Januari 2004
  • Laatst online: 23:35

MueR

Admin Devschuur® & Discord

is niet lief

SQL:
1
2
3
4
SELECT m.itemid, m.naam
FROM tbl_menuitems m
LEFT JOIN tbl_regels r ON (r.regel = m.regel AND r.gebruikersnaam = '{$username}')
WHERE r.status = 1 OR r.regelid  < 0
ofzo?

[ Voor 3% gewijzigd door MueR op 27-05-2008 12:33 ]

Anyone who gets in between me and my morning coffee should be insecure.


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
MueR schreef op dinsdag 27 mei 2008 @ 12:32:
SQL:
1
Oplossing op een presenteerblaadje...
Is het weer voorkauwdag :? Los van het feit dat ik niet zie wat r.regelid < 0 moet doen :X

[ Voor 54% gewijzigd door RobIII op 27-05-2008 12:34 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • GlowMouse
  • Registratie: November 2002
  • Niet online
RobIII schreef op dinsdag 27 mei 2008 @ 12:33:
[...]
Los van het feit dat ik niet zie wat r.regelid < 0 moet doen :X
Ik zie totaal niet wat regelid in de tabel moet doen, als er dubbele van mogen zijn.

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 23:35

MueR

Admin Devschuur® & Discord

is niet lief

Meh, voorkauwdag..Ik heb gewoon wat geklopt zonder echt te kijken :P als TS dit al niet kan fabriceren, vraag ik me af wat ie wil bereiken. Daarbij klopt zn database model totaal niet. Hier komt ie nog mee in de problemen.

offtopic:
Tijd voor een P&W meet, die opmerking van je moet gewroken worden.. laserquest dit keer?

[ Voor 47% gewijzigd door MueR op 27-05-2008 13:16 ]

Anyone who gets in between me and my morning coffee should be insecure.


  • Exception
  • Registratie: Augustus 2006
  • Laatst online: 18-11 16:26
Jongens, sorry dat ik dit in het verkeerde forum heb geplaatst. Tevens ben ik vergeten de regelid te veranderen naar 3, id is dus oplopend.

Ik weet wel dat het kan met JOIN en ik snap dat IF basic programmeren is, maar ik kom er niet uit dit te gebruiken in de query! Nogmaals de eisen:
  • Het menuitem mag getoond worden wanneer er geen regel is ingevoerd in tbl_menuitems.
  • Het menuitem mag getoond worden wanneer er wel een regel is ingevoerd en de status daarvan 1 is en de gebruikersnaam gelijk is aan $_SESSION['username'] in tbl_regels.
Dus als de regel NIET is opgegeven in tbl_menuitems, dan mag het item wel worden getoond. Als de regel wel voorkomt moet deze worden gecontroleerd op status in tbl_regels. Bij 1 wel tonen, en bij 0 niet.

Dit wil ik graag in één query, zonder php te gebruiken.
Sorry voor mijn onduidelijkheid. Misschien is het zo duidelijker?

En het heeft niets met voorkauwen te maken, jullie hoeven dat niet eens, maar ik wil graag wat hulp met het opbouwen van de query...

[ Voor 7% gewijzigd door Exception op 27-05-2008 13:37 ]


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Exception schreef op dinsdag 27 mei 2008 @ 13:32:
En het heeft niets met voorkauwen te maken, jullie hoeven dat niet eens, maar ik wil graag wat hulp met het opbouwen van de query...
Je herhaalt nu gewoon je topicstart en ik zie niet wat je zélf al geprobeerd had en 'hoe ver' je je query al hebt; ook zie ik niet wat je doet met de tips die al gegeven zijn. Again, zoals je in de Quickstart zult lezen waar ik je op wees, we verwachten hier toch echt meer eigen inzet. Toon op z'n minst wat je al gefabriceerd hebt.

[ Voor 15% gewijzigd door RobIII op 27-05-2008 13:45 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Exception
  • Registratie: Augustus 2006
  • Laatst online: 18-11 16:26
Het volgende heb ik al, maar dat werkt niet. De query ziet er anders uit, omdat ik in de TS alles even anders heb genoemd en alle gegevens ophaal. Het gaat me gewoon even om de basis.

SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT
`tbl_menuitems`.`naam`,
`tbl_menuitems`.`subid`,
`tbl_menuitems`.`icoon`
FROM
`tbl_beheerdersregels` ,
`tbl_menuitems`
WHERE
( 
IF EXISTS ( SELECT `regel` FROM `tbl_beheerdersregels` WHERE `regel` = `tbl_menuitems`.`regel` AND `gebruikersnaam` = 'jvanhees')  THEN
    (
        `tbl_beheerdersregels`.`status` =  1
    )
)
AND `tbl_beheerdersregels`.`gebruikersnaam` = 'jvanhees'


De fout zit mij denk ik in het verkeerd gebruiken van IF EXISTS.

[ Voor 19% gewijzigd door Exception op 27-05-2008 13:49 ]


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Zoals ik al aangaf: waar is je JOIN? En kun je voortaan wat specifieker zijn dan "werkt niet"? Krijg je een foutmelding? Krijg je niet de gewenste resultaten?
Maar begin toch eerst maar eens met je in te lezen in het hele join gebeuren. En als je dan toch bezig bent, neem dan ook meteen even wat normalisatie-informatie door ;)

[ Voor 60% gewijzigd door RobIII op 27-05-2008 13:53 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Brakkie
  • Registratie: Maart 2001
  • Niet online

Brakkie

blaat

Waarom join je de tabel met regels niet op de menu items en check je dan niet gewoon op Null of 1 bij de status

Systeem | Strava


  • Exception
  • Registratie: Augustus 2006
  • Laatst online: 18-11 16:26
Het is me bijna gelukt,

SQL:
1
2
3
4
5
6
7
8
9
10
11
SELECT
`tbl_menuitems`.`itemid`,
`tbl_menuitems`.`naam`,
`tbl_menuitems`.`icoon`
FROM
`tbl_beheerdersregels` 
Inner Join `tbl_menuitems` ON `tbl_beheerdersregels`.`regel` = `tbl_menuitems`.`regel`
WHERE
(`tbl_menuitems`.`regel` =  `tbl_beheerdersregels`.`regel` OR
`tbl_menuitems`.`regel` =  '''') AND
`tbl_beheerdersregels`.`gebruikersnaam` =  'jvanhees'

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Exception schreef op dinsdag 27 mei 2008 @ 13:55:
Het is me bijna gelukt,

SQL:
1
2
3
4
5
6
7
8
9
10
11
SELECT
`tbl_menuitems`.`itemid`,
`tbl_menuitems`.`naam`,
`tbl_menuitems`.`icoon`
FROM
`tbl_beheerdersregels` 
Inner Join `tbl_menuitems` ON `tbl_beheerdersregels`.`regel` = `tbl_menuitems`.`regel`
WHERE
(`tbl_menuitems`.`regel` =  `tbl_beheerdersregels`.`regel` OR
`tbl_menuitems`.`regel` =  '''') AND
`tbl_beheerdersregels`.`gebruikersnaam` =  'jvanhees'
En again: wat gaat er mis? Wat werkt er niet? Wat is "bijna gelukt"? En waarom een inner join :? Ik begin het aardig beu te worden iemand zo aan het handje te houden. Ik heb je er inmiddels vaak genoeg op gewezen in dit topic.

[ Voor 6% gewijzigd door RobIII op 27-05-2008 13:56 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Pagina: 1

Dit topic is gesloten.