Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将多个列和行合并到一个条目中_Php_Mysql_Sql_Mysqli - Fatal编程技术网

Php 将多个列和行合并到一个条目中

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.

我有一个关系数据库,其中一个主表链接到其他带有外键的表。我正试图用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.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
      解析。这还不足以阻止注射吗?