Schleifen in SQL?

1 Antwort

Vorausgesetzt ich verstehe dich richtig und deine Tabelle sieht etwa so aus:

CREATE TABLE `namen` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(45),
`code` varchar(45),
PRIMARY KEY (`ID`)
);

dann solltest du hiermit zum Ziel kommen:


SELECT
if(name != @temp , @rownum := 1, @rownum := @rownum + 1) AS nm,
@temp := name AS temp,
name,
code,
concat(name, '_', @rownum)
FROM (SELECT @rownum := 0) AS ROWNUM, namen
ORDER BY name;

Ich ermittle alle Datensätze der Tabelle und sortiere nach Namen, jetzt bilden alle Datensätze mit gleichen Namen einen Block. Die Variable rownum wird einfach bei jedem Datensatz hochgezählt, aber nur, wenn sich der Namen ändert, sonst wieder auf 1 zurück gesetzt. Daher speichere ich auch den gerade ermittelten Namen in der Variablen temp zwischen.

Naja und concat setzt dir einfach den Namen neu zusammen, so wie du es beschrieben hast.




geri3d  24.02.2016, 10:42

ich wusste gar nicht, dass SQL sölche konstrukte zulässt aber man lernt nie aus. DH