1

少し奇妙なタイトルの説明かもしれませんが、基本的には関数が行うことを達成したいGROUP_CONCAT()だけで、二重エントリを保持します。

結合したいテーブルが 4 つあり、clientdoctorphysioおよび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, 
4

1 に答える 1

2

試す:

SELECT
    client.c_id, client.c_name
    doctor.d_name, 
    physio.p_name, 
    GROUP_CONCAT(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."'
GROUP BY
    client.c_id

r_date1 つの列に収まりたい場合は、最初にrecordプレーンを使用してから、その上で a を実行できます。CONCATGROUP_CONCAT

于 2012-11-12T12:40:42.773 に答える