Langsung saja ke kasus, contoh saya mempunyai tabel di database MySQL dengan nama tabel_1 dengan isi sebagai berikut:
kelompok |
nama |
A |
Adi |
A |
Budi |
A |
Budi |
A |
Cici |
B |
Beni |
B |
Dona |
B |
Joni |
B |
Luki |
dari tabel di atas, saya ingin mendapatkan hasil seperti berikut dengan sekali query select,
kelompok |
nama |
nom |
A |
Adi |
1 |
A |
Budi |
2 |
A |
Budi |
3 |
A |
Cici |
4 |
B |
Beni |
1 |
B |
Dona |
2 |
B |
Joni |
3 |
B |
Luki |
4 |
dari hasil di atas terlihat tiap nama mendapatkan nomor urut per kelompok A dan B, dan meski ada nama yang sama tetap mendapatkan nomor urut yang unique per kelompok. Setelah utak atik berikut query select-nya:
SELECT f.kelompok,f.nama,FIND_IN_SET(CONCAT(f.nama,f.no),(SELECT GROUP_CONCAT(CONCAT(nama,nr) ORDER BY kelompok,nama) FROM (SELECT a.*,@nr:=@nr+1 AS nr FROM tabel_1 a, (SELECT @nr:=0) b ORDER BY kelompok,nama) c WHERE c.kelompok = f.kelompok )) AS nom FROM (SELECT d.kelompok,d.nama,@NO:=@NO+1 AS NO FROM tabel_1 d, (SELECT @NO:=0) e ORDER BY 1,2) f ORDER BY 1,2,3
tampak ribet dan panjang, semoga ke depan ada query yang lebih sederhana hehe, sekian dulu dan semoga bermanfaat.