У меня проблема с MySQL user defined variables
!
Моя таблица выглядит так ...
plz | uid
4000 1
4000 2
9000 3
7000 4
Желаемый результат ..
rownum | plz | uid
1000 4000 1
1000 4000 2
999 9000 3
998 7000 4
Я хочу SELECT
несуществующий столбец rownum
в качестве флагового столбца вместе с plz
и uid
столбцом. При изменении значения в столбце plz
столбец rownum
должен быть уменьшен на 1. Все равно plz
должен иметь такой же rownum
. plz
уникален.
Мой подход ..
SELECT
(CASE WHEN @plz <> user.plz THEN @row := @row -1 ELSE @row END) AS rownum, @plz:= user.plz, uid
FROM
(SELECT @row := 1001) r, user
LEFT JOIN
geodb_locations ON user.plz = geodb_locations.id
WHERE
user.plz IN(29386,30013,29271,30406)
ORDER BY
FIELD(user.plz,29386,30013,29271,30406),
uid DESC
Этот запрос работает, но только при втором вызове. При первом вызове все значения rownum
устанавливаются на 1001. Как изменить CASE WHEN statement
, которое работает при первом вызове? Есть идеи?
Заранее спасибо !!
Редактировать ЗАПРОС
SELECT
@prev as previous, @prev := u.plz as current, CASE WHEN @prev <> u.plz THEN @row := @row -1 ELSE @row END AS rownum,
uid
FROM
(SELECT @prev := NULL, @row := 1001) as r, user as u
LEFT JOIN
geodb_locations ON u.plz = geodb_locations.id
WHERE
u.plz IN(29386,30013,29271,30406) AND
freigeben=1 AND
uid != 97548
ORDER BY
FIELD(u.plz,29386,30013,29271,30406),
uid DESC
Вывод правильный, но СЛУЧАЙ, КОГДА кажется неудачным !? rownum всегда равен 1001! Даже если @prev НЕ РАВНО. Любые идеи? В чем моя вина?
Вывод
+----------+---------+--------+-------+
| previous | current | rownum | uid |
+----------+---------+--------+-------+
| NULL | 29386 | 1001 | 92014 |
| 29386 | 29386 | 1001 | 87223 |
| 29386 | 29386 | 1001 | 83160 |
| 29386 | 29386 | 1001 | 81322 |
| 29386 | 29386 | 1001 | 81293 |
| 29386 | 29386 | 1001 | 81259 |
| 29386 | 29386 | 1001 | 34213 |
| 29386 | 29386 | 1001 | 34026 |
| 29386 | 29386 | 1001 | 32851 |
| 29386 | 29386 | 1001 | 32668 |
| 29386 | 29386 | 1001 | 32358 |
| 29386 | 29386 | 1001 | 31338 |
| 29386 | 29386 | 1001 | 27765 |
| 29386 | 29386 | 1001 | 26254 |
| 29386 | 29386 | 1001 | 23474 |
| 29386 | 29386 | 1001 | 23130 |
| 29386 | 29386 | 1001 | 20512 |
| 29386 | 29386 | 1001 | 14864 |
| 29386 | 29386 | 1001 | 10951 |
| 29386 | 29386 | 1001 | 8045 |
| 29386 | 29386 | 1001 | 6921 |
| 29386 | 29386 | 1001 | 4459 |
| 29386 | 29386 | 1001 | 3152 |
| 29386 | 29386 | 1001 | 1939 |
| 29386 | 30013 | 1001 | 65193 | <-- @prev <> u.plz why NO decreasing `rownum`
| 30013 | 29384 | 1001 | 12883 |
| 29384 | 29385 | 1001 | 32667 |
| 29385 | 29232 | 1001 | 86641 |
| 29232 | 29481 | 1001 | 94521 |
| 29481 | 29481 | 1001 | 33950 |
| 29481 | 29481 | 1001 | 33926 |
| 29481 | 29667 | 1001 | 16027 |
| 29667 | 29667 | 1001 | 496 |
| 29667 | 29355 | 1001 | 96013 |
+----------+---------+--------+-------+