1

外部キーを持つ他のテーブルにリンクされた 1 つのメイン テーブルを持つリレーショナル データベースがあります。すべてのデータを取得するために PHP でレポート ツールを作成しようとしていますが、その一部で問題が発生しています。

これまでの私のクエリは次のとおりです。

SELECT * 
FROM student s 
LEFT OUTER JOIN ep e ON s.sID = e.sID 
LEFT OUTER JOIN ntc n ON s.sID = n.sID 
LEFT OUTER JOIN pk p ON s.sID = p.sID 
LEFT OUTER JOIN roa r ON s.sID = r.sID 
WHERE s.sID = '$id'

ep、ntc、pk は全てスチューデントと 1:1 なので問題ありません。ただし、roa テーブルには、学生ごとに複数のレコード (複数の行にまたがる) が保持されます。

roa テーブルの構造:

+----------+--------------+------+-----+-------------------+----------------+
| Field    | Type         | Null | Key | Default           | Extra          |
+----------+--------------+------+-----+-------------------+----------------+
| roaID    | int(11)      | NO   | PRI | NULL              | auto_increment |
| sID      | int(11)      | NO   | MUL | NULL              |                |
| roa      | varchar(255) | NO   |     | NULL              |                |
| roaStaff | varchar(50)  | NO   |     | NULL              |                |
| visible  | tinyint(1)   | NO   |     | 1                 |                |
+----------+--------------+------+-----+-------------------+----------------+

aselect * from roa where sID = 1が返す場所:

+-------+-----+---------------+----------+---------+
| roaID | sID | roa           | roaStaff | visible |
+-------+-----+---------------+----------+---------+
|    41 | 1   | Description 1 | Staff 1  |       1 |
|    60 | 1   | Description 2 | Staff 2  |       1 |
+-------+-----+---------------+----------+---------+

元のクエリを達成するために私がしているのは、次のような結果です。

<-student, etc data
..-------+-----+-----------------------------------------------+---------+
.. roaID | sID | roa                                           | visible |
..-------+-----+-----------------------------------------------+---------+
..    41 | 1   | Description 1 Staff 1, Description 2 Staff 2  |       1 |
...
...

roa.roa と roa.roaStaff の両方がすべて 1 つのセルにあるようにします。

使用してみGROUP_CONCATましたが、複数の列をグループ化するのではなく、1 つの列に対してのみ機能させることができました。

どんな助けでも大歓迎です。

よろしく。

4

1 に答える 1

1

このようなことを試してください、

SELECT ......, GROUP_CONCAT(CONCAT(roa, ' ', roaStaff)) roa
FROM ...

したがって、クエリにプラグインすると、

SELECT * 
FROM student s 
LEFT OUTER JOIN ep e ON s.sID = e.sID 
LEFT OUTER JOIN ntc n ON s.sID = n.sID 
LEFT OUTER JOIN pk p ON s.sID = p.sID 
LEFT OUTER JOIN 
(
    SELECT sID, GROUP_CONCAT(CONCAT(roa, ' ', roaStaff)) roa
    FROM roa 
    GROUP BY sID
) r ON s.sID = r.sID 
WHERE s.sID = '$id'

フォローアップの質問、visibleテーブルのフィールドはどうroaですか?どのように表示したいですか

サイドノート

クエリは脆弱です。それからSQL INJECTION保護する方法については、以下の記事をお読みください。

于 2012-12-12T03:44:29.120 に答える