Пользовательская переменная MySQL с разными результатами?

У меня возникла эта проблема, которую я просто не могу понять, и мне было интересно, есть ли у кого-нибудь информация об этом.

В настоящее время я запускаю приведенный ниже SQL (в схеме, аналогичной приведенной здесь: demo )...

SELECT match_id, team, date, hometeam, awayteam, FTHG, FTAG, `2.5 goals`
FROM (
 SELECT 
 match_id, team, TEMP.date, hometeam, awayteam, FTHG, FTAG,
 @teamCounter:=IF(@prevHome=team,@teamCounter+1,1) teamCounter,
 @prevHome:=team,
CASE    WHEN FTHG + FTAG < 2.5 THEN 'UNDER'
    ELSE 'OVER'
END  AS `2.5 goals`
 FROM TEMP
 JOIN (
 SELECT DISTINCT date, hometeam team
 FROM TEMP
 UNION 
 SELECT DISTINCT date, awayteam
 FROM TEMP
 ORDER BY team, date DESC
 ) allgames
 ON TEMP.date = allgames.date
 AND (TEMP.hometeam = allgames.team
 OR TEMP.awayteam = allgames.team)
 JOIN (SELECT @teamCounter:=0) t
 ORDER BY team, TEMP.date DESC
 ) t 
WHERE teamCounter <= 6
ORDER BY team, date;

SQL основан на ответе Stackoverflow, который я нашел Здесь, но в основном я хочу, чтобы он показывал мне последние 6 игр, в которых участвовала каждая команда (дома или на выезде).

Странно то, что когда я запускаю это в MySQL, он будет работать в первом сеансе SQL, но сеансы, созданные после этого, будут возвращать совершенно разные результаты. Затем я могу удалить поле match_id из внешнего списка SELECT, и запрос вернется к своему обычному набору данных, пока снова не откроется другой сеанс... а затем возврат поля match_id покажет желаемые результаты, как для начала, начиная с нас в начало снова.

Я не уверен, что SQLFiddle, с которым я связался, воссоздаст проблему, но может ли кто-нибудь объяснить, почему это происходит?

Любая помощь очень ценится!

Кев


person kevino_17    schedule 14.01.2014    source источник
comment
Каждый раз, когда вы начинаете использовать: @teamCounter:= в запросе, все становится рискованным. Вы можете попробовать установить для всех своих переменных значение null или 0 перед запуском. (например: set @teamCounter = 0)   -  person    schedule 15.01.2014
comment
Привет ebyrob, спасибо за ответ. Я добавил набор @teamCounter = 0 в начало и конец SQL и скомпилировал его в хранимую процедуру. Однако теперь я получаю желаемые 6 строк на команду только при втором запуске процедуры... есть идеи? Я в тупике.   -  person kevino_17    schedule 15.01.2014
comment
А- добавил набор @prevHome = null; к началу и концу SQL и теперь работает каждый раз. Огромное спасибо за вашу помощь, это действительно ценится.   -  person kevino_17    schedule 15.01.2014
comment
Рад, что это сработало! Я думаю, что это можно было бы сделать с помощью более стандартного SQL-запроса, но если он у вас заработает. Я уверен, что это будет медведь, так почему бы не использовать то, что есть. Удачи.   -  person    schedule 15.01.2014