AND en OR (welke heeft voorrang?)
Ik heb al een tijdje zitten nadenken of AND en OR of ||.
Stel ik heb een query:
Code (php)
1
$query = mysql_query("SELECT * FROM Table WHERE Column1 = 1 AND Column2 = 2 || Column3 = 3");
Wat betekent dit nu?
Stel, ik heb 2 rijen
Rij 1
Column1 = 1
Column2 = 2
Column3 = 3
Rij 2
Column1 = 2
Column2 = 1
Column3 = 3
Welke rijen worden er nu uitgepakt?
Rij 1 voldoet aan de voorwaarden dat Column1 = 1 AND Column2 = 2
Rij 2 voldoet aan de voorwaarden dat Column3 = 3
Wat zegt de query nu?
Selecteer de Tabel waar (Column1 = 1 AND Column2 = 2) OF (Column3 = 3)
Selecteer de Tabel waar (Column1 = 1) EN (Column2 = 2 OF Column3 = 3)
Dit kun je toch zelf heel snel/eenvoudig testen?
Dus 5 + 2 - 3 kan je schrijven als: (5 + 2) - 3. Wat dus hetzelfde is als 7 - 3. Het lijkt me dus dat SQL hetzelfde gaat doen: (Column1 = 1 AND Column2 = 2) OF (Column3 = 3)
Maar ik wet het dus ook niet zeker, daarom, maak een dummy tabel en vertel het resultaat :-)
Want op het moment dat er OR staat word hij geselecteerd als hij aan één voorwaarde voldoet.
Rij 1 voldoet aan het eerste stukje , namelijk: Column1=1 AND Column2=2.
En Rij 2 voldoet aan het tweede stukje, namelijk: Column3 =3.
Dus ze worden allebei geselecteerd.
Als je een query zou willen schrijven zoals in de laatste regel, zou je dit moeten schrijven:
$query ="SELECT * FROM Table WHERE Column1 = 1 AND Column2 = 2 OR Column1 = 1 AND Column3 = 3";
Gewijzigd op 16/08/2012 19:02:28 door Leon blabla
Selecteer de Tabel waar (Column1 = 1) EN (Column2 = 2 OF Column3 = 3)
gebruiken
Hoe doe ik dat dan?
In het nederlands zeg je:
Query1; selecteer de rijen waarvan c1 de waarde 1 heeft én c2 de waarde 2, zoniet dan de rijen waarvan c3 de waarde 3 heeft.
Pas hetzelfde toe op je tweede query.
Toevoeging op 16/08/2012 18:59:30:
@Leon,
Dat is echt zo fout, je kan geen AND en OR zonder haakjes door elkaar gebruiken
Kan ik haakjes zetten in mysql?
Probeer het......
:O!!!! Geweldig! Ik hou van dit soort Halleluja momentjes :D! Heerlijk, weer wat enorme belangerijke kennis opgedaan! Bedankt!
Gewijzigd op 16/08/2012 19:11:59 door Ger van Steenderen
Hoezo niet betrouwbaar? Volgens mij is het meer het probleem dat 9 van de 10 keer er dan iets anders gebeurt dan dat je wilt. Dus, ja, wel haakjes gebruiken inderdaad.
bedankt allemaal!
Met andere woorden is het niet betrouwbaar om zonder haakjes te werken, in elke zichzelf respecterende programmeertaal krijg je gewoon een foutmelding om je oren als je het niet doet.
ik werk nu met haakjes, en het werkt perfect foutloos
[klaagmode]
Iets werkt perfect of iets is foutloos
[/klaagmode]
Ger, dat jij dit onbetrouwbaar noemt is volgens mij een verkeerde woord keuze. Als je iets verkeerd gebruikt en er dus iets gebeurd wat jij niet verwacht is het toch niet onbetrouwbaar?
En waarom zou een programmeertaal je verplichten haakjes te gebruiken? Zonder haakjes kan toch ook, als je maar goed door hebt wat er gebeurd.
Begrijp me trouwens niet verkeerd, ik ben grote voorstander van het gebruik van haakjes -al is het alleen voor de verbetering van de leesbaarheid.
Gewijzigd op 16/08/2012 23:03:18 door Wouter J
Het is ook perfect leesbaar/interpreteerbaar wanneer je vertrouwd bent het het principe van operator volgorde (kennis van wiskunde en logica helpt uiteraard ook).
Als je dit kan lezen zonder haakjes: 5 + 7 * 2 = 19
zie ik niet waarom je speciaal meer moeite zou doen voor OR / AND
Dit gezegd zijnde... toch liever een haakje te veel dan te weinig.
Ook met wat extra indentering kan je veel duidelijk maken.
Ik heb ooit wel eens een rekenmachine gehad die als uitkomst 24 had, dus in die zin heb ik een 'slechte jeugd' gehad. Dus - ik ben de kwaaiste niet ;-) - laten we onbetrouwbaar veranderen in onverstandig.
Als je 5*2+7 hebt, is de uitkomst altijd tegenwoordig (5*2)+7. Hier zet de rekenmachine automatisch die haakjes erbij.