少し奇妙なタイトルの説明かもしれませんが、基本的には関数が行うことを達成したいGROUP_CONCAT()
だけで、二重エントリを保持します。
結合したいテーブルが 4 つあり、client
、doctor
、physio
およびrecords
変数に応じて$client
、クライアントの詳細、主治医、セラピスト (3 つのテーブルから 1 行) を取得し、そのユーザーのすべてのレコードを結合します。
この場合、$client = 1
. records
テーブルには 5 つのレコードがあり、列はr_client_id = 1
. 以下のようなクエリを実行すると、records
テーブルから 1 つのレコード、つまり最初に出現したレコードのみが取得されますr_client_id = 1
(もちろん意味があります)。
SELECT
client.c_id, client.c_name
doctor.d_name,
physio.p_name,
records.r_record
FROM
adm_clients AS client
INNER JOIN
norm_client_doctor AS ncd ON ncd.ncd_client_id = client.c_id
INNER JOIN
adm_doctor AS doctor ON doctor.d_id = ncd.ncd_doctor_id
INNER JOIN
norm_client_physio AS ncp ON ncp.ncp_client_id = client.c_id
INNER JOIN
adm_physio AS physio ON physio.p_id = ncp.ncp_physio_id
LEFT JOIN
adm_doctor_records AS records ON records.r_client_id = client.c_id
WHERE
client.c_id = '".$client."'
ここで、次のr_client_id = 1
ような 5 つのレコードがあるとします。
+------+-------------+-------------------+----------+
| r_id | r_client_id | r_record | r_date |
+------+-------------+-------------------+----------+
| 1 | 1 | regular visit | 10/10/12 |
+------+-------------+-------------------+----------+
| 3 | 1 | emergency control | 24/10/12 |
+------+-------------+-------------------+----------+
| 7 | 1 | regular visit | 08/09/12 |
+------+-------------+-------------------+----------+
| 18 | 1 | delivery | 03/01/12 |
+------+-------------+-------------------+----------+
| 20 | 1 | health checkup | 10/12/11 |
+------+-------------+-------------------+----------+
出力を次のような配列にしたい:
Client 1
- Name Doctor
- Name Physio
Records
- Emergency control, 24/10/12
- Regular visit, 10/10/12
- Regular visit, 08/09/12
- Delivery, 03/01/12
- Health checkup, 10/12/11
私がイメージできる最も近いものは、レコードに a を追加することですGROUP_CONCAT()
が、もちろん、それは「定期的な訪問」をグループ化するため、5 行ではなく 4 行を取得します。
GROUP_CONCAT(DISTINCT records.r_record SEPARATOR '|')
[..]
echo(str_replace("|","<br>",$show->r_record));
一致するすべてのレコードを表示する方法を知っている人はいますか? 私は近づいていると感じていますが、今では選択肢がありません..
編集:DISTINCT
を削除すると、すべてのレコードが 2 回表示さ
れることを忘れていました..
解決済み:
次のように動作しました:
GROUP_CONCAT(DISTINCT
CONCAT (records.r_date, '~', records.r_record, '~', records.r_paraph)
SEPARATOR '|') AS clientDoctorRecords,