webForumDet fria alternativet

Användarvariabler i Mysql 4.1 vs 5.0?

6 svar · 655 visningar · startad av M@rtin

M@rtinMedlem sedan dec. 19992 085 inlägg
#1

Har mysql gjort någon stor förändring vad gäller användarvariabler från version 4.1 till version 5?

SELECT @score,title FROM msgs WHERE (@score:=( IF(title LIKE '%test%',5,0)+ IF(title LIKE '%forum%',5,0)))>0 ORDER BY @score DESC;

Denna fungerar utmärkt lokalt på datorn med mysql 5.0 installerat, men fungerar inte på mitt webhotell som kör 4.1. På webbhotellet fungerar det dels inte att selecta @score men det är inte helt nödvändigt, men när den tilldelar @score ett värde verkar den få värdet av enbart IF nummer 2, den första ignoreras.

Någon som har en idé om vad det kan vara för fel? Jag är jätteförvirrad.

LarsGMedlem sedan dec. 200012 464 inlägg
#2
SELECT title,score from 
  (select title , 
       case when title like '%test%' then 5 else 0 end +
       case when title like '%forum%' then 5 else 0 end as score
  FROM msgs ) as dt
 where score > 0
ORDER BY score DESC
M@rtinMedlem sedan dec. 19992 085 inlägg
#3

Funkade klocka! Tack så mycket för det snabba svaret!

Finns det någon anledning till att köra den basic-liknande typen av if-sats istället för den jag använde? Testade båda och de verkar inte göra någon skillnad.

LarsGMedlem sedan dec. 200012 464 inlägg
#4

basic-liknande typen av if-sats

vad menar du?

M@rtinMedlem sedan dec. 19992 085 inlägg
#5
IF(title LIKE '%forum%',5,0)

vs.

case when title like '%forum%' then 5 else 0 end
LarsGMedlem sedan dec. 200012 464 inlägg
#6

Jaha, if som du använder den är en funktion, inte en sats. Det var därför jag blev förbryllad. case är standard SQL men inte if. Allt som du kan uttrycka med if går också att uttrycka med case.

M@rtinMedlem sedan dec. 19992 085 inlägg
#7

Ah okej, då ska jag börja köra case istället.

137 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)