2016-07-19 3 views
2

возможно иметь нумерацию в GROUP_CONCATGROUP_CONCAT нумерации

как

Если из GROUP_CONCAT (empnam SEPARATOR '')

Я получаю множество,

< JohnM, DannyP, TiffnyK, KarlM > 

I необходимо иметь

< 1.JohnM, 2.DannyP, 3.TiffnyK, 4.KarlM > 

Я пробовал следовать, но не получил желаемых результатов.

SET @x:=0; 

    SELECT 

      GROUP_CONCAT(@x:[email protected]+1,' ', s.empnam SEPARATOR ', ') AS emps, @x:=0 
    <tables> 
    <filters> 

Возможно ли это на уровне запроса, или я должен сделать это на стороне приложения?

+0

Я думаю, было бы лучше, если вы сделаете это в стороне приложения –

ответ

2

Вы можете сделать это на стороне приложения, но в MySql это, конечно, возможно. В следующем запросе я предполагаю, что вы группируете имена чем-то, например, их отделом (я назвал его dep). Это позволяет проиллюстрировать, что счетчик начинается с 1 для каждой новой группы.

select dep, 
     group_concat( 
      concat(@i := if (@grp = dep, @i + 1, if(@grp := dep,1,1)), '.', empnam) 
      separator ', ') emps 
from  t 
group by dep; 

См. SQL fiddle.

Обязательно укажите свое имя таблицы в предложении from и использовать фактическое поле, которое вы хотите группировать. Если у вас есть несколько полей для группировки, выражение, назначенное @i, необходимо будет изменить. Вы можете, например, объединить значения, определяющие группу.

Используя разделитель двух символов, вы гарантируете наличие пробела между каждым именем.

1

Попробуйте это:

SET @x:=0; 

SELECT 
     GROUP_CONCAT(CONCAT(@x:[email protected]+1, '.', s.empnam) SEPARATOR ', ') AS emps, @x:=0 
<tables> 
<filters> 
+0

, но это не так, как результат моего запроса, он не обновится на 1 на новой записи, так или иначе! Я сделал это на стороне приложения – Hytool

+1

@Hytool Я думаю, что это должно сработать, пожалуйста, проверьте демо здесь http://sqlfiddle.com/#!9/4b523/3 – Blank

+0

Поскольку мой запрос должен был выполнять нагрузки GROUP BY для одиночной записи, It во всяком случае, ваше решение работает с просто группой по запросу, поэтому работает и мое решение! Спасибо за ваше время ! – Hytool

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