2013-02-12 2 views
0

Пример таблицыИспользование SQL для создавать текстовые

---------------------------     -------- 
| id | user | num | type | ---> Want to get | name | 
---------------------------     -------- 
| 5 | 1 | 2 | Q |     | Q2A | 
---------------------------     -------- 
| 10 | 1 | 2 | Q |     | Q2B | 
---------------------------     -------- 
| 11 | 1 | 2 | Q |     | Q2C | 
---------------------------     -------- 
| 12 | 2 | 2 | Q |     | Q2A | 
---------------------------     -------- 
| 14 | 1 | 3 | R |     | R3A | 
---------------------------     -------- 
| 17 | 2 | 3 | R |     | R3A | 
---------------------------     -------- 

Пояснение

У меня есть простой схемы базы данных, как показано на рисунке слева. Мне нужно использовать SQL для генерации данного столбца имени на основе значений. Я уже понял, как CONCAT(type,num), но я не понимаю, как создать правильное письмо. Я знаю, что в SQL это возможно, потому что я давно что-то сделал.

Схема нумерации Для каждого пользователя, так как больше строк с одинаковым num и type найдены, буквы должны прогрессировать от A-Z. Там никогда не будет больше, чем 26, так что дело не в этом.

Я думаю, что я могу сначала сгенерировать числа (т.е. 1,2,3 вместо A, B, C), а затем сделать что-то по линиям SELECT 1 FROM [A..Z] , Я просто не уверен, как это сделать в MySQL.

UPDATE

If I can get from here:     To: 
---------------------------     -------------- 
| id | user | num | type |     | name | seq | 
---------------------------     -------------- 
| 5 | 1 | 2 | Q |     | Q2 | 1 | 
---------------------------     -------------- 
| 10 | 1 | 2 | Q |     | Q2 | 2 | 
---------------------------     -------------- 
| 11 | 1 | 2 | Q |     | Q2 | 3 | 
---------------------------     -------------- 
| 12 | 2 | 2 | Q |     | Q2 | 1 | 
---------------------------     -------------- 
| 14 | 1 | 3 | R |     | R3 | 1 | 
---------------------------     -------------- 
| 17 | 2 | 3 | R |     | R3 | 1 | 
---------------------------     -------------- 
Then its just a simple matter of using CHAR() 
+0

Можете ли вы предоставить больше данных образца? Будете ли вы также иметь Q3A, B и C? –

+1

Какова логика назначения буквы? Это не очевидно из вашего примера. –

+2

'| 11 | 1 | 2 | Q | | Q3A | '??? – SparKot

ответ

3

Я думаю, что вы ищете что-то вроде этого:

SELECT 
    id, user, num, type, seq 
FROM (
SELECT 
    sample.*, 
    @row:= case when @lst_type=type 
        and @lst_user=user 
        and @lst_num=num then @row+1 else 65 end, 
    CONCAT(type, num, CHAR(@row)) seq, 
    @lst_type:=type, 
    @lst_user:=user, 
    @lst_num:=num 
FROM sample, (select @lst_type:=null, 
        @lst_user:=null, 
        @lst_num:=null, 
        @row:=65) r 
ORDER BY id 
) s 

см скрипку here.

+0

+1 - Даже если это не то, что хочет OP (кто знает?), Любите использовать CHAR! – sgeddes

+0

Да, этот ответ предоставил много прозрения, но я случайно оставил детали, которые делают это решение не совсем подходящим :( –

+0

@sgeddes спасибо :) было давно, так как я не использовал CHAR :) – fthiella

Смежные вопросы