webForumDet fria alternativet

Användarvariabler i Mysql 4.1 vs 5.0?

Databaser & SQL

6 svar · 655 visningar · startad av M@rtin

Medlem sedan dec. 19992 085 inlägg
Frågan#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.

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

Medlem sedan dec. 200012 464 inlägg
#4

basic-liknande typen av if-sats

vad menar du?

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

vs.

case when title like '%forum%' then 5 else 0 end
Medlem 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.

Medlem sedan dec. 19992 085 inlägg
#7

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

382 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
122 ms — deklarationer (db)
119 ms — hämta statistik (db)
137 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)