Toon posts:

[MySQL] De volgende query werkt niet:

Pagina: 1
Acties:

Verwijderd

Topicstarter
SELECT
members.member_id,
members.nickname,
members.password,
privileges.priv_name,
priv_link.privilege_id
FROM
members AS a,
priv_link AS b,
privileges AS c
WHERE
a.member_id = b.member_id
AND
B.privilege_id = c.privilege_id
AND
members.nickname = '$nickname'

afijn, ik wil dus gegevens halen uit drie tabellen, genaamd :
members (leden + ledengegevens)
priv_link (koppeltabel members-privileges)
privileges (wat mogen bepaalde users)

ik wil dus in privileges allemaal privileges zetten. Wat mag een user wel en wat mag een user niet. Nu wil ik 1 standaard privilege aanmaken op id 1, een 'gewone' user moet dat worden.

Maar ik wil dus met 1 query bepaalde ledengegevens ophalen, en tegelijk alle privilege namen die gekoppeld zijn via de priv_linktabel aan de betreffende user...
De opgegeven query werkt niet... ik krijg de volgende fout:

Something is wrong in your syntax près de 'privileges AS c WHERE a.member_id = b.member_id AND B.privilege_' à la ligne 1

iemand een idee? of een oplossing hoe ik anders de priv_name kan ophalen? Met een inner join of left join ofzo..

  • j_du_pee
  • Registratie: Maart 2000
  • Laatst online: 23-09-2024

j_du_pee

du pain, du vin, du pee

ik denk zomaar dat privileges een reserved word is ;)

kaart != map && bottel != fles
Wacht op antwoord


Verwijderd

Topicstarter
hmm :) is er een escape teken in mysql?

  • DeverauX
  • Registratie: Februari 2002
  • Niet online

DeverauX

Focus is everything

hmm is er een escape teken in mysql?
Nee afaik is dit niet mogelijk. Gewoon de naam even aanpassen vindt ik echter wel beter :P

[ Voor 16% gewijzigd door DeverauX op 28-06-2003 15:02 ]

...whatever was distasteful or unpleasant or uncomfortable or painful - music could always soothe that.
All you have to do is reach out to beauty.
Quincy Jones


  • j_du_pee
  • Registratie: Maart 2000
  • Laatst online: 23-09-2024

j_du_pee

du pain, du vin, du pee

kaart != map && bottel != fles
Wacht op antwoord


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 28 June 2003 @ 14:56:
hmm :) is er een escape teken in mysql?
Ja, `melp`

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
ik d8 ik vraag het gewoon even... anders is het zo'n kort topic :)

merci guys

Verwijderd

Moet dat niet
code:
1
2
3
4
5
6
SELECT 
    a.member_id,
    a.nickname,
    a.password,
    c.priv_name,
    b.privilege_id
zijn?

[ Voor 26% gewijzigd door Verwijderd op 28-06-2003 15:55 ]


  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Verwijderd schreef op 28 June 2003 @ 15:53:
Moet dat niet
code:
1
2
3
4
5
6
SELECT 
    a.member_id,
    a.nickname,
    a.password,
    c.priv_name,
    b.privilege_id
zijn?
kan ook, hoeft niet, ligt er maar net aan hoe duidelijk je die a, b,c en d vind :P

Verwijderd

Erkens schreef op 28 June 2003 @ 15:56:
kan ook, hoeft niet, ligt er maar net aan hoe duidelijk je die a, b,c en d vind :P
Ah ok, ik dact dat dat verplicht was als je gaat renamen ;)

Het moet dus alleen als je echte ambiguëteit (bijv. 2x members) kunt hebben.

[ Voor 15% gewijzigd door Verwijderd op 28-06-2003 15:58 ]


  • GambitRS
  • Registratie: Juni 2001
  • Laatst online: 13-06-2013

GambitRS

w00t

En je mag op die manier geloof ik geen tabbellen aan elkaar maken in MySQL, dat moet zo:

Select A.data,B.blad
from Appel A LEFT JOIN Boom B
ON A.boom = B.boom

Zie ook de MySQL manual over subselects

[ Voor 36% gewijzigd door GambitRS op 28-06-2003 16:03 ]

MechWarrior || Monsters Game


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 00:45

Creepy

Tactical Espionage Splatterer

GambitRS schreef op 28 June 2003 @ 15:59:
En je mag op die manier geloof ik geen tabbellen aan elkaar maken in MySQL, dat moet zo:

Select A.data,B.blad
from Appel A LEFT JOIN Boom B
ON A.boom = B.boom

Zie ook de MySQL manual over subselects
Ow.. dat mag zeker wel hoor. Dat mag in elke variant van SQL. Ik heb hier nog een boek over SQL liggen dat nagenoeg elke join beschrijft, echter ZONDER het gebruik van de keyword JOIN en ON, dus op de manier zoals de T.S. dat doet.

Overigens snap ik je opmerking over subselects niet? Want 3 tabellen zijn best te joinen.

[ Voor 7% gewijzigd door Creepy op 28-06-2003 17:08 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
Ok, die query werkt nu wel. Ik krijg meerdere rijen terug.. 2 om precies te zijn, die ik snel even aangemaakt heb.
Maar bij het inloggen haal ik dus de opgegeven dingen allemaal op, ik doe een $row = mysql_fetch_array en ik check het wachtwoord...

daarna vul ik enkele sessievariabelen, maar nu wil ik de priv_namen in een array plaatsen. Maar ik kan nu niet meer de query-array doorlopen... Moet ik dan nu eerst weer een query afvuren?

Verwijderd

Topicstarter
-sorry-

[ Voor 98% gewijzigd door Verwijderd op 28-06-2003 18:10 ]


  • jsiegmund
  • Registratie: Januari 2002
  • Laatst online: 21-08 21:12
Verwijderd schreef op 28 June 2003 @ 18:09:
daarna vul ik enkele sessievariabelen, maar nu wil ik de priv_namen in een array plaatsen. Maar ik kan nu niet meer de query-array doorlopen... Moet ik dan nu eerst weer een query afvuren?
Dezelfde query nog eens een keer bedoel je? Lijkt me redelijk onnuttig.. Je kunt de resultaten best nog een keertje doorlopen, moet je alleen die array waarin ze staan even resetten (check manual) zodat de pointer weer op het eerste element staat. Zal wel een logische functie naam zijn, array_reset() ofzo ik kijke wel even.

't is gewoon reset(); zie ook http://nl2.php.net/manual/en/function.reset.php

[ Voor 7% gewijzigd door jsiegmund op 28-06-2003 19:16 ]


Verwijderd

Topicstarter
iCe01 schreef op 28 June 2003 @ 19:14:
[...]


Dezelfde query nog eens een keer bedoel je? Lijkt me redelijk onnuttig.. Je kunt de resultaten best nog een keertje doorlopen, moet je alleen die array waarin ze staan even resetten (check manual) zodat de pointer weer op het eerste element staat. Zal wel een logische functie naam zijn, array_reset() ofzo ik kijke wel even.

't is gewoon reset(); zie ook http://nl2.php.net/manual/en/function.reset.php
mja, maar geldt dit ook voor een array die ik verkregen heb met :

mysql_fetch_array ?

:)

  • jsiegmund
  • Registratie: Januari 2002
  • Laatst online: 21-08 21:12
Geen idee, probeer het zou ik zeggen... en als het niet zo is maak je toch een tweede temp arraytje waarin je die mysql results even opslaat? Dan werkt het zeker weten.

Verwijderd

Topicstarter
iCe01 schreef op 29 June 2003 @ 13:17:
Geen idee, probeer het zou ik zeggen... en als het niet zo is maak je toch een tweede temp arraytje waarin je die mysql results even opslaat? Dan werkt het zeker weten.
Hmm.. met reset() lukte het helaas niet zoals ik het wenste, maar het antwoord op mijn probleem was opgelost met de functie:

mysql_data_seek($result, 0)

met deze functie resette ik in principe de results van mijn query... dus niet de $row die ik al gefetched had...

  • GambitRS
  • Registratie: Juni 2001
  • Laatst online: 13-06-2013

GambitRS

w00t

Creepy schreef op 28 June 2003 @ 17:07:
[...]

Ow.. dat mag zeker wel hoor. Dat mag in elke variant van SQL. Ik heb hier nog een boek over SQL liggen dat nagenoeg elke join beschrijft, echter ZONDER het gebruik van de keyword JOIN en ON, dus op de manier zoals de T.S. dat doet.

Overigens snap ik je opmerking over subselects niet? Want 3 tabellen zijn best te joinen.
Lees dan toch de manual maar eens goed door. Ik zeg niet dat het niet werkt, ik zeg dat het eigenlijk stiekem toch niet goed is. Lees het gedeelte over de snelheid maar eens door, dan weet je denk ik wel waar ik het over heb.

MechWarrior || Monsters Game


Verwijderd

Topicstarter
GambitRS schreef op 30 June 2003 @ 12:07:
[...]


Lees dan toch de manual maar eens goed door. Ik zeg niet dat het niet werkt, ik zeg dat het eigenlijk stiekem toch niet goed is. Lees het gedeelte over de snelheid maar eens door, dan weet je denk ik wel waar ik het over heb.
zit er zoveel verschil tussen het gebruik van (INNER/LEFT/RIGHT etc)-JOINS en de JOINs op ce manier die ik toepas?

Ik kan hem namelijk wel omzetten in een INNER en LEFT JOIN structuur, ik moet dan alleen even opzoeken wanneer ik INNER en wanneer ik LEFT moet gebruiken of RIGHT misschien wel...

Maar boek je zoveel snelheid winst?

Verwijderd

Wat heeft een subquery nu met bovenstaande query te maken ????
Er wordt op een goede manier 3 tabellen gekoppeld. :|

  • _Sunnyboy_
  • Registratie: Januari 2003
  • Laatst online: 14-01 22:23

_Sunnyboy_

Mooooooooooooooooo!

Met JOINS schijnt het sneller te zijn ja, zeker bij grote tabellen en als je de joins op de goeie volgorde neerzet, omdat ie dan niet alle 3 de tabellen volledig hoeft te doorzoeken naar matches.

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


Verwijderd

Topicstarter
_Sunnyboy_ schreef op 30 June 2003 @ 12:35:
Met JOINS schijnt het sneller te zijn ja, zeker bij grote tabellen en als je de joins op de goeie volgorde neerzet, omdat ie dan niet alle 3 de tabellen volledig hoeft te doorzoeken naar matches.
Hmm, interessant...
ik zal er eens even naar kijken :)

  • TutanRamon
  • Registratie: Februari 2001
  • Laatst online: 21-08 23:42
SELECT
members.member_id,
members.nickname,
members.password,
privileges.priv_name,
priv_link.privilege_id
FROM
members AS a,
priv_link AS b,
privileges AS c
WHERE
a.member_id = b.member_id
AND
B.privilege_id = c.privilege_id
AND
members.nickname = '$nickname'
--

te laat, sorry. Ik mistte effe het bericht dat het al werkte.

[ Voor 12% gewijzigd door TutanRamon op 30-06-2003 12:47 ]

We see things as we are, not as they are


  • jsiegmund
  • Registratie: Januari 2002
  • Laatst online: 21-08 21:12
Sorry hoor mensen maar een JOIN gebruiken hier gaat echt geen merkbare snelheidswinst geven. Die query die je uitvoert is een join "in den beginne", het gaat leuk worden als ze ingewikkeld worden, want zoals hierboven inderdaad staat: een JOIN in SQL is een opdracht die je in principe niet nodig hebt. Hij is erin gebouwd om in moeilijke gevallen wat snelheidswinst te boeken, maar dit is nog zo simpel... gaat echt niets schelen, lekker zo laten staan.
Pagina: 1