[PHP/MYSQL] SELECT WHERE x =a OR x= b AND y =...

Pagina: 1
Acties:
  • 135 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • WaarAnders
  • Registratie: Juni 2001
  • Laatst online: 20-07 21:31
code:
1
    $select = "SELECT * FROM Scheids WHERE Klasse = 1 OR Klasse = 2 OR Klasse = 3 AND Voorkeur != 'zon' AND Team != '$team' AND Disable = 0 AND Tdisable = 0 AND Van >= '$van' AND Tot <= '$tot'  ORDER BY Aantal LIMIT 2";


Dit werkt niet, aangezien er iemand met klasse 1 kan zijn, maar ook op disabled staat. Dit komt door de OR in de code. Ik heb alleen geen idee hoe het dan wel moet. Van http://dev.mysql.com/doc/mysql/en/select.html werd ik niet veel wijzer.

Ik neem aan dat hier meer mensen tegen aan gelopen zijn en hoe is dit opgelost?

edit: ik zie dat topic wel veel caps bevat, sorry dit gebeurde automatisch bij het schrijven van SELECT en WHERE

[ Voor 16% gewijzigd door WaarAnders op 12-10-2005 11:49 ]


Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 20:01
Haakjes gebruiken.

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • WaarAnders
  • Registratie: Juni 2001
  • Laatst online: 20-07 21:31
code:
1
 WHERE x=a (OR x=b) AND y=


op die manier?

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Je legt niet goed uit wat je wil, dus de haakjes kunnen we niet voor jou op de goede plek zetten. Bovendien zou je toch echt zelf even 5 minuten moeten inlezen over boolean expressions met haakjes (en afhankelijk van wat je precies wil doen, is DeMorgan kennen ook nodig begrijpen wel handig). ;)

Ik gok dat (Klasse = 1 OR Klasse = 2 OR Klasse = 3) AND voorwaarde 1 AND voorwaarde 2 etc je bedoeling is? Oftewel 1 van die 3 klassen en alle andere voorwaarden?

[ Voor 27% gewijzigd door Voutloos op 12-10-2005 13:47 . Reden: Terechte opmerking van Confusion. ]

{signature}


Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 20:01
Nee, niet op die manier.
Op die manier heeft een haakje toch geen nut.
Je groepeert de dingen die ahw bij elkaar horen, bv.
code:
1
WHERE ( x = a or x = b ) AND y = 5


Je kan ook de IN operator gebruiken ipv OR:
code:
1
WHERE x  in (a, b, c)


Maar, dit is toch echt wel basis-kennis hoor.

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

Voutloos schreef op woensdag 12 oktober 2005 @ 11:54:
(en afhankelijk van wat je precies wil doen, is DeMorgan kennen ook nodig). ;)
Die heb je toch nooit nodig? Het maakt het alleen overzichtelijker.

Wie trösten wir uns, die Mörder aller Mörder?


Acties:
  • 0 Henk 'm!

  • WaarAnders
  • Registratie: Juni 2001
  • Laatst online: 20-07 21:31
code:
1
(Klasse = 1 OR Klasse = 2 OR Klasse = 3) AND voorwaarde 1


dit was inderdaad wat ik bedoelde. Excuses als dit basis kennis was, ik kon het niet vinden

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Confusion schreef op woensdag 12 oktober 2005 @ 12:08:
[...]
Die heb je toch nooit nodig? Het maakt het alleen overzichtelijker.
offtopic:
Ik doelde op het maken van fouten als WHERE x != 1 OR x!= 2 (welke altijd true is). Inderdaad is de benaming van deze fout niet de DeMorgan-regel. Wel maken mensen die De Morgan snappen deze beginnersfout niet. ;) Je hebt gelijk dat ik het wat brak uitdrukte.
WaarAnders schreef op woensdag 12 oktober 2005 @ 12:20:
code:
1
(Klasse = 1 OR Klasse = 2 OR Klasse = 3) AND voorwaarde 1


dit was inderdaad wat ik bedoelde. Excuses als dit basis kennis was, ik kon het niet vinden
OK. Als je nu maar wel het verschil tussen '(a OR b) AND c' en 'a OR (b AND c)' begrijpt. :)

[ Voor 29% gewijzigd door Voutloos op 12-10-2005 13:54 ]

{signature}


Acties:
  • 0 Henk 'm!

  • Daos
  • Registratie: Oktober 2004
  • Niet online
WaarAnders schreef op woensdag 12 oktober 2005 @ 12:20:
code:
1
(Klasse = 1 OR Klasse = 2 OR Klasse = 3) AND voorwaarde 1


dit was inderdaad wat ik bedoelde. Excuses als dit basis kennis was, ik kon het niet vinden
Het is hetzelfde principe als bij gewoon rekenen (basisschool-niveau). 1+ 2 x 3 reken je uit als 1 + (2 x 3) => 7 omdat vermenigvuldigen voor optellen gaat.

Meestal noemt met dit operator precedence.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

En nogmaals, WHERE klasse IN (1, 2, 3) gebruiken is veel handiger dan dit. Levert niet zo'n lange query op. ;)

'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.


Acties:
  • 0 Henk 'm!

  • klinz
  • Registratie: Maart 2002
  • Laatst online: 17-09 15:24

klinz

weet van NIETS

-NMe- schreef op donderdag 13 oktober 2005 @ 13:50:
En nogmaals, WHERE klasse IN (1, 2, 3) gebruiken is veel handiger dan dit. Levert niet zo'n lange query op. ;)
En is het vaak performanter.
Pagina: 1