次のとおりです。
私は2つのテーブルを持っています。
最初の表は、従業員と呼ばれています
|イード| ENAME | 給与| ========================= | 1 | A | 300 | | 2 | B | 400 | | 3 | O | 500 |
2番目の表は、Employee_Sal_Changesと呼ばれています
| EID | Salary_Change_History | 今年 ======================================= | 1 | 100 | 2012年 | 1 | 200 | 2013 | 1 | 300 | 2014 | 2 | 200 | 2013 | 2 | 400 | 2014 | 3 | 100 | 2011 | 3 | 200 | 2012 | 3 | 300 | 2013 | 3 | 500 | 2014
私のフロントエンドテーブルでは、私が表示したいと思い
ID |給与変更履歴| ================================= A | 100:2012 | | 200:2013 | | 300:2014 | ================================= B | 200:2013 | | 400:2014 | ================================= O | 100:2011 | | 200:2012 | | 300:2013 | | 400:2014 | =================================
私はsalary_change_history年EIDにmached取得し、ループを使用することにより、フロントエンドでそれらを表示したいと思います。
それらを取得するには、私はGROUP_CONCATを使用して配列に格納しようとしたが、それが唯一の値を取得する場所EID = 1
ここでは、バックエンドでのクエリがあります
Select
(select Group_Concat(Employee_Sal_Changes.Salary_Change_History),(Group_Concat(Employee_Sal_Changes.year) from Employee_Sal_Changes left join Employee on Employee_Sal_Changes.EID = Employee.EID),
Employee.EName
From Employee_Sal_Changes
より良い方法はありますかGROUP_CONCATを使用し続けるだけ?
GMB:
あなたは、集約を使用することができます。
select
eid,
group_concat(
year, ':', salary_change_history
order by year
separator '\n'
) salary_change_history
from employee_sal_changes
group by eid
各従業員のために、これはリスト生成<year>:<salary>
キャリッジリターンで区切られた値。あなたが持参する必要はありませんemployee
、他のテーブルには、すべての必要な情報があります。その結果セットを生成するテーブル。
あなたにも、従業員の名前をしたい場合:
select
s.eid,
e.ename,
group_concat(
s.year, ':', s.salary_change_history
order by s.year
separator '\n'
) salary_change_history
from employee_sal_changes s
inner join employee e on e.eid = s.eid
group by s.eid, e.ename