Пользовательские переменные, сложение, count(*)

fixxxer

К.О.
Партнер клуба
Пользовательские переменные, сложение, count(*)

1)[sql]select @a:=0; select @a:=@a+count(*), count(*) from user group by `user`;[/sql]
Код:
+-----------------+----------+
| @a:=@a+count(*) | count(*) |
+-----------------+----------+
|               2 |        2 |
|               1 |        1 |
|               1 |        1 |
...
2)[sql]select @a:=0; select @a:=@a+0+count(*), count(*) from user group by `user`;[/sql]
Код:
+-------------------+----------+
| @a:=@a+0+count(*) | count(*) |
+-------------------+----------+
|                 2 |        2 |
|                 3 |        1 |
|                 4 |        1 |
...
Объясните plz, почему так получается. Подозреваю, что, когда я указываю +0, происходит приведение типа, но все же интересно знать точно. :) Кстати, если group by по int полю, +0 необязательно... Странно, разве тип выражения count(*) имеет отношение к типу поля?

mysql 4.0.16, экспериментировал на таблице user базы mysql, которая точно у всех есть :)
 

Demiurg

Guest
Давай ты скажешь, что тебе нужно получить, а мы скажем как.
 

fixxxer

К.О.
Партнер клуба
Мне ничего не надо получить. Вопрос чисто теоретический. :) Дабы понимать, как работают @vars. Возник в результате решения чисто из интереса задачи получения суммы count(*) при использовании group by.
 

Demiurg

Guest
count(*) и group by обычно используются без переменных.
 

chira

Новичок
в версии 3.23.57 в обоих случаях работает одинаково.
 

fixxxer

К.О.
Партнер клуба
Автор оригинала: chira
в версии 3.23.57 в обоих случаях работает одинаково.
"одинаково" - это как? одинаково правильно или одинаково неправильно? :) (правильно в смысле ожидаемого результата)
 

chira

Новичок
правильно
Код:
+-----------------+----------+
| @a:=@a+count(*) | count(*) |
+-----------------+----------+
|               2 |        2 |
|               3 |        1 |
|               4 |        1 |
 

tony2001

TeaM PHPClub
4.1.0-alpha
Код:
+-----------------------+------------+
| @a := @a + count( * ) | count( * ) |
+-----------------------+------------+
|                     2 |          2 |
|                     2 |          2 |
|                     1 |          1 |
+-----------------------+------------+
и
Код:
+---------------------------+------------+
| @a := @a + 0 + count( * ) | count( * ) |
+---------------------------+------------+
|                         2 |          2 |
|                         4 |          2 |
|                         5 |          1 |
+---------------------------+------------+
 
Сверху