[mysql] Samma fråga, olika resultat

Trädvy Permalänk
Medlem
Plats
Australien
Registrerad
Feb 2002

[mysql] Samma fråga, olika resultat

Hej,

Sitter och är förvirrad. Jag ställer nedan fråga till min databas och får helt olika resultat, och jag hittar verkligen ingen anledning till detta.

SELECT COUNT(palSort) as amount FROM `palabPal_tmp` WHERE YEAR(slagDatum) = '2015' AND palSort LIKE 'VL%' OR palSort LIKE 'PU%' OR palSort LIKE 'AU%' OR palSort LIKE 'AZ%'

Ger

2033

Medan

SELECT COUNT(palSort) AS amount FROM `palabPal_tmp` WHERE YEAR(slagDatum) = '2015' AND palSort LIKE 'PU%' OR palSort LIKE 'VL%' OR palSort LIKE 'AZ%' OR palSort LIKE 'AU%'

Ger

4368

Den ENDA skillnaden på mina querys ovan, som jag kan se, är ordningen som jag har skrivit in kolumnerna som den ska sortera efter?

Trädvy Permalänk
Medlem
Registrerad
Jan 2014

AND har precedens över OR.

På svenska: Den första frågan tolkas som alla rader som matchar någon av

  • YEAR(slagDatum) = '2015' AND palSort LIKE 'VL%'

  • palSort LIKE 'PU%'

  • palSort LIKE 'AU%'

  • palSort LIKE 'AZ%'

De andra frågan matchar alla rader som matchar någon av

  • YEAR(slagDatum) = '2015' AND palSort LIKE 'PU%'

  • palSort LIKE 'VL%'

  • palSort LIKE 'AZ%'

  • palSort LIKE 'AU%'

Använd parenteser för att gruppera logiken som du vill ha den:

SELECT COUNT(palSort) AS amount FROM `palabPal_tmp` WHERE YEAR(slagDatum) = '2015' AND (palSort LIKE 'PU%' OR palSort LIKE 'VL%' OR palSort LIKE 'AZ%' OR palSort LIKE 'AU%')

borde ge samma resultat oavsett ordning på palSort-villkoren.

Trädvy Permalänk
Medlem
Plats
Australien
Registrerad
Feb 2002

@Hieronymus Bosch: Strålande! Funkade klockrent, hade ingen koll alls på att AND har precedens över OR. Fick dock lite kalla kårar nu, behöver nog gå igenom lite kod och se så jag inte har mera fel som detta, upptäckte det av en ren slump!