Toon posts:

[MySQL] JOIN filteren

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi allemaal

Ik heb tweede dezelfde query's maar voor 2 andere doeleinde. Eentje moet de rechten ophalen voor de ingelogde gebruiker en eentje voor de gebruik die bewerkt word.

Nu wil ik dat de rechten van de ingelogd gebruiker worden weggehaald die de bewerkte gebruiker heeft.
Dus dat alleen de rechten over blijven die de bewerkte gebruiker niet heeft.

het gaat op de volgende query:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
select l.item, l.action 
  from rightlist l
inner
  join admin_right a
    on l.item = a.item 
   and l.action = a.action 
   and (
       (
       a.type_id = '" . $nUserGroupID . "' 
   and a.type = 'usergroup'
       )
    or (
       a.type_id = " . $nUserID . " 
   and a.type = 'user' 
   and a.access = 'yes'
       )
       )
left outer
  join admin_right a2
    on l.item = a2.item 
   and l.action = a2.action 
   and a2.type_id = " . $nUserID . " 
   and a2.type = 'user' 
   and a2.access = 'no'
 where a2.item is null

Deze is voor beide hetzelfde.

Kan iemand mij hier mee helpen of de juiste weg ophelpen.

Alvast bedankt

  • whoami
  • Registratie: December 2000
  • Laatst online: 14:06
MINUS

https://fgheysels.github.io/


Verwijderd

Topicstarter
Ik heb gekeken op MySQL en google en ik kan weinig informatie over MINUS vinden.
Hier op tweakers zie ik dat het een subquery is.
Dit gaat niet omdat ik mySQL 4.0 tot mijn beschikking heb.

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Ik probeer te begrijpen wat je nu precies wil, maar het lukt me niet echt. Wat is een bewerkte gebruiker en wat is een ingelogde gebruiker?

Als ik het buiten die context trek, dan denk ik dat je bedoelt:

Ik heb een gebruikersnaam A en een gebruikersnaam B en ik wil een query die me alle rechten van A geeft die B niet heeft. Klopt dit?

Kun je misschien ook de tabelstructuur even geven?

En nu dat ik je code nog iets beter bekijk zie ik de term UserGroupId en UserId met hetzelfde veld in admin_right gebruikt worden. Dit riekt naar een fout in je datamodel.

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

MINUS is een soort van UNION, voor zover ik weet en heeft niets met een subquery te maken. Zie ook deze pagina.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Topicstarter
@bigbeng
Ja ik wil alle rechten hebben van A hebben die B niet heeft.

Ik heb effe de export gepakt van de tabel:
code:
1
2
3
4
5
6
7
8
9
CREATE TABLE `admin_right` (
  `id` int(9) NOT NULL auto_increment,
  `type_id` int(9) default NULL,
  `type` varchar(20) default NULL,
  `item` varchar(20) default NULL,
  `action` varchar(20) default NULL,
  `access` char(3) NOT NULL default 'yes',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT


type_id is de id van de user of gebruikersgroep
type kan user of usergroup zijn.
item welke onderdeel van het script is het.
action de actie die mag worden uitgevoerd.
access yes of no. No kan zijn wanneer een gebruiker die onder een gebruikersgroep hangt minder rechten heeft als de gebruikersgroep.

@-NME-
Moet ik minus hetzelfde gebruiken als UNION dan heb ik een probleem want UNION pakt ie maar MINUS niet.

[ Voor 4% gewijzigd door Verwijderd op 29-06-2005 19:57 ]


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Minus ken ik niet, doet dat wat EXCEPT doet, maar dan anders ofzo?

EXCEPT is iig standaard sql en vziw ondersteund MySQL dat grotendeels in 4.0. (of wellicht alleen union en zijn ze except vergeten ofzo :X )

Verwijderd

Topicstarter
Blijkbaar zijn ze EXCEPT vergeten in 4.0 alleen UNION doet wat. :'(
Iemand nog andere ideeen

[ Voor 22% gewijzigd door Verwijderd op 29-06-2005 20:15 ]


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Ja overschakelen op een DBMS dat sub-queries ondersteund, 2 queries gebruiken en zelf het verschil ertussen uitrekenen, of 2 queries gebruiken waarbij je de resultaten van de eerste query gebruikt i.c.m WHERE ... IN ( resultaten vorige query )

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • TheLunatic
  • Registratie: April 2001
  • Laatst online: 16-08-2025

TheLunatic

Ouwe boxen.

Afaik ondersteunen de nieuwere versies van MySQL probleemloos subqueries, toch?

Mother, will they like this song?


Verwijderd

Topicstarter
Ja I know maar hoe deden ze het dan voor MySQL 4.0 of wachten die mensen tot dat 4.1 bestond..

[ Voor 4% gewijzigd door Verwijderd op 29-06-2005 20:39 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 14:06
ACM schreef op woensdag 29 juni 2005 @ 19:58:
[...]

Minus ken ik niet, doet dat wat EXCEPT doet, maar dan anders ofzo?

EXCEPT is iig standaard sql en vziw ondersteund MySQL dat grotendeels in 4.0. (of wellicht alleen union en zijn ze except vergeten ofzo :X )
Ik geloof dat dit dan Oracle specifiek is.
MINUS selecteert alles uit de eerste 'set' dat niet voorkomt in de 2de

https://fgheysels.github.io/


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Select l.item, l.action from {regel 2 t/m 25met A's ID's} full outer joinop rechten {regel 2 t/m 25 met alias k voor rightlist en user B's ID's} where k.item is null.

Is een flinke onoverzichtelijk en duur gedrocht, maar met iets als dit moet het toch kunnen. :+

Overigens snap ik niet waarom access een char(3) veld is, als er alleen maar {yes|no} in gaat. Bit/boolean als datatype lijkt me dan beter.

[ Voor 12% gewijzigd door Voutloos op 29-06-2005 21:13 ]

{signature}


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

TheLunatic schreef op woensdag 29 juni 2005 @ 20:22:
Afaik ondersteunen de nieuwere versies van MySQL probleemloos subqueries, toch?
4.1 heeft ondersteuning voor subqueries ja, niet probleemloos en niet compleet; geen limits mogelijk in subqueries, vreselijk trage executie van queries die niet traag zouden moeten zijn, rare resultaten door bugs die ik niet in vereenvoudigde queries kan reproduceren (en dus niet zo makkelijk/niet kan reporten).
Maar deze situatie zou er op zich wel in moeten werken ja.
Verwijderd schreef op woensdag 29 juni 2005 @ 20:06:
Blijkbaar zijn ze EXCEPT vergeten in 4.0 alleen UNION doet wat. :'(
Iemand nog andere ideeen
Ook in 4.1 hebben ze volgens mij nog geen INTERSECT en EXCEPT.
Verwijderd schreef op woensdag 29 juni 2005 @ 20:35:
Ja I know maar hoe deden ze het dan voor MySQL 4.0 of wachten die mensen tot dat 4.1 bestond..
Je query is tamelijk uniek, maar men zal wel redelijk balend van het gebrek aan subqueries de boel met vieze left-joined-queries opgelost hebben of twee losse queries gedaan hebben en het resultaat van de ene in een of andere 'itemid NOT IN (x, y, z, ...)' gestopt hebben.
whoami schreef op woensdag 29 juni 2005 @ 21:07:
Ik geloof dat dit dan Oracle specifiek is.
MINUS selecteert alles uit de eerste 'set' dat niet voorkomt in de 2de
Vziw zijn UNION, INTERSECT en EXCEPT de namen die in de SQL-standaard gebruikt worden. UNION is samenvoegen van resultaten, INTERSECT is die records die in beide resultaten voorkomen en EXCEPT is die resultaten van de eerste die niet in de tweede zitten. Jouw MINUS heet in de SQL standaard dus EXCEPT :)
Pagina: 1