1) ORDER BY sikrer ikke rækkefølgen på din SELECT, men kun rækkefølgen af poster i resultatsættet. Du kan derfor ALDRIG forvente det ønskede.
2) Iflg. MySQL dokumentationen (
http://www.mysql.com/doc/V/a/Variables.html) evalueres variabler først ved returnering til klienten, og de kan derfor ikke bruges i GROUP BY, HAVING eller ORDER BY.
3) @var2 er NULL til at starte med, og dermed er @var2!=data altid falsk. Ved at vælge WHERE frem for HAVING (uden ORDER BY!!) giver det stadigt ingen rækker, idet variablene kun sættes hvis rækken vælges - det @var2 der står i WHERE klausulen svarer til @var2 sæt i den sidste valgte række og ikke den række du er ved at vælge.
4) Overvej hvad det er du ønsker og se om du ikke kan skrive det uden brug af variabler. Deres egentlige brug er vel mest til at flytte resultater fra en kommendo til den næste (se igen dokumentationen).