Tabelle/Insert-Daten erstellen.
CREATE TABLE USER (
NAME VARCHAR(255) DEFAULT NULL
) ENGINE=INNODB DEFAULT CHARSET=utf8;
INSERT INTO USER (NAME) VALUES('goku');
INSERT INTO USER (NAME) VALUES('goku');
INSERT INTO USER (NAME) VALUES('sliceoflife');
INSERT INTO USER (NAME) VALUES('sliceoflife');
INSERT INTO USER (NAME) VALUES('sliceoflife');
Abfrage
SELECT * FROM USER
Ergebnis
name
-------------
goku
goku
sliceoflife
sliceoflife
sliceoflife
Diese mit Benutzervariablen möglich ist.
Abfrage
SELECT
*
, (
CASE
WHEN
@user = User.name
THEN
@rank := @rank + 1
WHEN
@user != User.name
THEN
@rank := ''
END
)
AS
rank
, @user := User.name
FROM
USER
CROSS JOIN (
SELECT
@user := ''
, @rank := ''
)
AS
init_user_vars
ORDER BY
User.name ASC
Ergebnis
name @user := '' @rank := '' rank @user := User.name
----------- ----------- ----------- ------ --------------------
goku goku
goku 1 goku
sliceoflife sliceoflife
sliceoflife 1 sliceoflife
sliceoflife 2 sliceoflife
es jetzt einfach Namen und Rang Concat. Sie müssen die obige Abfrage als ausgelieferte Tabelle verwenden.
SELECT
(
CASE
WHEN rank IS NOT NULL
THEN CONCAT(NAME, rank)
WHEN rank IS NULL
THEN CONCAT(NAME)
END
)
AS
NAME
FROM (
SELECT
*
, (
CASE
WHEN
@user = User.name
THEN
@rank := @rank + 1
WHEN
@user != User.name
THEN
@rank := ''
END
)
AS
rank
, @user := User.name
FROM
USER
CROSS JOIN (
SELECT
@user := ''
, @rank := ''
)
AS
init_user_vars
ORDER BY
User.name
)
AS
user_ranked
Ergebnis
name
--------------
goku
goku1
sliceoflife
sliceoflife1
sliceoflife2
Bitte geben Sie die Tabelle Aussage mit einigen Beispieldaten –
erstellen teilen Wenn 'username' für die Anmeldung ist es wahrscheinlich sowieso einen' UNIQUE' Index verwendet wird haben sollte. – CD001
@ CD001 das sind migrierte Daten, die ich versuche zu korrigieren. – TopCheese