AND en OR (welke heeft voorrang?)

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Albert de Wit

Albert de Wit

16/08/2012 18:35:41
Quote Anchor link
Hallo,

Ik heb al een tijdje zitten nadenken of AND en OR of ||.

Stel ik heb een query:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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)
 
PHP hulp

PHP hulp

26/04/2024 15:00:49
 
Obelix Idefix

Obelix Idefix

16/08/2012 18:42:26
Quote Anchor link
Dit kun je toch zelf heel snel/eenvoudig testen?
 
Write Down

Write Down

16/08/2012 18:45:43
Quote Anchor link
Test het is uit? Maak een dummy tabel. Wat mij het logische lijkt, is dat het uitgevoerd wordt in volgorde. Programmeer logica kan je namelijk vaak vergelijken met wiskundige logica.

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 :-)
 
Leon blabla

Leon blabla

16/08/2012 18:48:07
Quote Anchor link
Je moet het heel letterlijk nemen en de query in stukjes snijden op de plek waar er OR staat.
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
 
Albert de Wit

Albert de Wit

16/08/2012 18:52:42
Quote Anchor link
Ik heb het al uitgetest, ik krijg beide rijen te zien. Alleen ik wil de query

Selecteer de Tabel waar (Column1 = 1) EN (Column2 = 2 OF Column3 = 3)

gebruiken

Hoe doe ik dat dan?
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

16/08/2012 18:57:25
Quote Anchor link
Het gaat er niet om wat er voorrang heeft, maar hoe je de haakjes zet. Zoals Write Down zegt is het gewoon ontleden.
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
 
Albert de Wit

Albert de Wit

16/08/2012 18:59:59
Quote Anchor link
Sorry mijn sql kennis is vrij gelimiteerd.

Kan ik haakjes zetten in mysql?
 
Obelix Idefix

Obelix Idefix

16/08/2012 19:00:21
Quote Anchor link
Probeer het......
 
Eddy E

Eddy E

16/08/2012 19:00:37
Quote Anchor link
Zoals jij het zelf zegt met die haakjes

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
SELECT Column1, Column2, Column3
FROM Table
WHERE Column1 = 1
AND ( Column2 = 2 || Column3 = 3)
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

16/08/2012 19:03:36
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
SELECT
    c1,c2, cnogwat
FROM
    smoetable
WHERE
    c1 = 1
AND
    (c2 = 2
    OR
    c3 = 3)
 
Albert de Wit

Albert de Wit

16/08/2012 19:03:42
Quote Anchor link
:O!!!! Geweldig! Ik hou van dit soort Halleluja momentjes :D! Heerlijk, weer wat enorme belangerijke kennis opgedaan! Bedankt!
 
Wouter J

Wouter J

16/08/2012 19:07:31
Quote Anchor link
Om jou vraag te beantwoorden. Kijk eens naar de MySQL operator precedence
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

16/08/2012 19:11:37
Quote Anchor link
Dat is geen betrouwbaar iets, gewoon haakjes gebruiken net zoals je in PHP zou doen
Gewijzigd op 16/08/2012 19:11:59 door Ger van Steenderen
 
Erwin H

Erwin H

16/08/2012 19:41:01
Quote Anchor link
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.
 
Albert de Wit

Albert de Wit

16/08/2012 19:44:37
Quote Anchor link
ik gebruik haakjes en het werkt perfect hoor ;)

bedankt allemaal!
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

16/08/2012 19:48:14
Quote Anchor link
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.
 
Albert de Wit

Albert de Wit

16/08/2012 20:38:55
Quote Anchor link
ik werk nu met haakjes, en het werkt perfect foutloos
 
Wouter J

Wouter J

16/08/2012 23:02:17
Quote Anchor link
Albert, dat weten we nu... Maar wij voeren graag nog even een discussie verder.
[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
 
Kris Peeters

Kris Peeters

17/08/2012 11:43:09
Quote Anchor link
Die volgorde is perfect betrouwbaar.
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.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

17/08/2012 15:35:15
Quote Anchor link
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.
 
Albert de Wit

Albert de Wit

17/08/2012 15:45:08
Quote Anchor link
ja maar je moet een som niet vergelijken hiermee want integendeel, een som word altijd op een volgorde berekend.

Als je 5*2+7 hebt, is de uitkomst altijd tegenwoordig (5*2)+7. Hier zet de rekenmachine automatisch die haakjes erbij.
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.