Как использовать функцию mysql GROUP BY для получения нескольких записей

У меня есть следующая таблица:

-----------------------------------------
id | advid | chq_num | chq_date | amount
-----------------------------------------
1 | 102 | 121212 | 2015-01-01 | 10000
-----------------------------------------
2 | 102 | 121213 | 2015-01-02 | 8000
-----------------------------------------
3 | 103 | 121214 | 2015-01-03 | 9000
-----------------------------------------
4 | 102 | 121215 | 2015-01-04 | 10000
-----------------------------------------
5 | 103 | 121216 | 2015-01-05 | 7000
-----------------------------------------

Теперь я хочу показать следующую информацию:

Advance ID: 102  Advance Amount: 28000
Cheque Num: 121212, 121213, 121215 Cheque Date: 2015-01-01, 2015-01-02, 2015-01-04

Для этого я использовал следующий запрос и код:

SELECT advid, sum(amount), chq_num, chq_date FROM my_table GROUP BY advid

после выполнения запроса из php при попытке получить результат:

$row = mysql_fetch_assoc($query);
echo 'Advance ID:'.$row['advid'].'&nbsp;&nbsp;Advance Amount: '.$row['amount'].'<br />;
echo 'Cheque Num: '.$row['chq_num'].'&nbsp;&nbsp;Cheque Date: '.$row['chq_date']

Но с помощью описанной выше техники извлечения я могу получить только первый «Check Num» и первый «Check Date». Как получить таким образом, чтобы я мог получить весь контрольный номер и контрольную дату, разделенную символом ‘,’ (запятая)?

С уважением

1

Решение

Ты можешь использовать GROUP_CONCAT функция для этого

SELECT
advid,
sum(amount) as amount,
group_concat(chq_num) as chq_num,
group_concat(chq_date) as chq_date
FROM my_table GROUP BY advid

chq_num а также chq_date будет возвращен через запятую

2

Другие решения

Вы можете использовать агрегатные функции, такие как sum а также group_concat для вашего желаемого результата.

SELECT advid
, sum(amount) as advance_amount
, group_concat(chq_num) as cheque_numbers
, group_concat(chq_date) as cheque_dates
FROM my_table
GROUP BY advid

Ссылаться на:

  • MySQL: GROUP_CONCAT
    • Эта функция возвращает строковый результат с объединенными ненулевыми значениями из группы. Возвращает NULL, если нет ненулевых значений.
0

SELECT advid,
group_concat(chq_num),
sum(amount),
group_concat(chq_date)
FROM my_table
GROUP BY advid
0