2010-03-11 2 views
1

У меня есть таблица действия, которая регистрирует действия, предпринятые пользователями:Получение имен людей, которые выполняют конкретные действия и персонализировать сообщение

ActionId, UserId 

В Actions таблица содержит имя и другие детали о action, и Пользователи таблица аналогичным образом содержит имя и данные о пользователях.

Теперь в моем приложении, я хочу, чтобы информировать пользователя о действиях его друзей взяли, что-то вроде: «Человек А, Person B, C Человек уже принял это действие»

Чтобы сделать это, я в настоящее время с помощью GROUP_CONCAT(), чтобы Concat имен людей, как:

SELECT GROUP_CONCAT(name) FROM Users 
LEFT JOIN Actions ON Users.UserId = Actions.UserId 
WHERE ActionId = '123' 

Однако, я хочу, чтобы персонализировать это сообщение двух способов.

  1. Я хочу «...» и «до» последнего пользователя, поэтому он звучит более естественно, чем список, созданный машиной.

  2. В тех случаях, когда пользователь также является одним из тех людей, которые приняли это действие, я хочу, чтобы отобразить сообщение, как:

«Person A, Person B, Person C и вы предприняли это действие. "

Какой самый элегантный способ достичь этого? Я ищу решение, которое достаточно эффективно для крупномасштабной системы.

+1

Предполагая, что вы вытаскиваете эти данные в веб-приложение, а затем выполняйте данные, используемые в SQL, SQL никогда не будет изящным для этого, это не его сильная сторона. – iain

ответ

0

На самом деле нет элегантного способа делать подобные вещи в SQL. Конечно, вы могли бы написать курсор, который проверяет различные условия и строит строку по мере продвижения.

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