Php 将多个列和行合并到一个条目中
我有一个关系数据库,其中一个主表链接到其他带有外键的表。我正试图用PHP编写一个报告工具来获取所有数据,但只得到了其中一部分的stck 以下是我目前的疑问:Php 将多个列和行合并到一个条目中,php,mysql,sql,mysqli,Php,Mysql,Sql,Mysqli,我有一个关系数据库,其中一个主表链接到其他带有外键的表。我正试图用PHP编写一个报告工具来获取所有数据,但只得到了其中一部分的stck 以下是我目前的疑问: 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.
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与student的比例均为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 | |
+----------+--------------+------+-----+-------------------+----------------+
其中,a从roa中选择*,其中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 |
...
...
试试这样的方法
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'
后续问题,关于表roa
上的visible
字段如何?您希望它如何显示
旁注
您的查询易受SQL注入的攻击
,请阅读下面的文章以了解如何防范此攻击
试试这样的方法
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'
后续问题,关于表roa
上的visible
字段如何?您希望它如何显示
旁注
您的查询易受SQL注入的攻击
,请阅读下面的文章以了解如何防范此攻击
嗨,谢谢,这很有效。可见的事实上并没有被使用。这更像是删除的替代方案,因此我们仍然可以返回并查看“删除”的内容。在添加到查询之前,所有数据都通过mysqli\u real\u escape\u string
解析。这还不足以防止注射吗?嗨,谢谢,这很有效。可见的事实上并没有被使用。这更像是删除的替代方案,因此我们仍然可以返回并查看“删除”的内容。在添加到查询之前,所有数据都通过mysqli\u real\u escape\u string
解析。这还不足以阻止注射吗?