Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.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/mysql中以简单的可排序表结构显示复杂记录集_Php_Mysql_Mysqli - Fatal编程技术网

如何在php/mysql中以简单的可排序表结构显示复杂记录集

如何在php/mysql中以简单的可排序表结构显示复杂记录集,php,mysql,mysqli,Php,Mysql,Mysqli,我正在编写一个报告脚本,其中报告字段并不总是固定的。管理员可以添加/删除/修改字段。我已经为此创建了以下表格 报告 id user_id csp_id date 1 1 1 2018-10-09 2 1 1 2018-10-10 3 2 2 2018-10-09 4 2 2 2018-10-10 meta_id display_name type default_v

我正在编写一个报告脚本,其中报告字段并不总是固定的。管理员可以添加/删除/修改字段。我已经为此创建了以下表格

报告

id  user_id csp_id  date
1       1       1   2018-10-09
2       1       1   2018-10-10
3       2       2   2018-10-09
4       2       2   2018-10-10
meta_id      display_name  type  default_value
csp_address  CSP address   text
csp_name     CSP Name      text
report_id   user_id     meta_id         meta_value
1           1           csp_address     Shivmandir
1           1           csp_name        Shiv CSP
2           1           csp_address     Matigara
2           1           csp_name        Mat CSP
3           2           csp_address     Darjeeling
3           2           csp_name        Dar CSP
4           2           csp_address     Gangtok
4           2           csp_name        Gang CSP
报告元字段

id  user_id csp_id  date
1       1       1   2018-10-09
2       1       1   2018-10-10
3       2       2   2018-10-09
4       2       2   2018-10-10
meta_id      display_name  type  default_value
csp_address  CSP address   text
csp_name     CSP Name      text
report_id   user_id     meta_id         meta_value
1           1           csp_address     Shivmandir
1           1           csp_name        Shiv CSP
2           1           csp_address     Matigara
2           1           csp_name        Mat CSP
3           2           csp_address     Darjeeling
3           2           csp_name        Dar CSP
4           2           csp_address     Gangtok
4           2           csp_name        Gang CSP
报告元值

id  user_id csp_id  date
1       1       1   2018-10-09
2       1       1   2018-10-10
3       2       2   2018-10-09
4       2       2   2018-10-10
meta_id      display_name  type  default_value
csp_address  CSP address   text
csp_name     CSP Name      text
report_id   user_id     meta_id         meta_value
1           1           csp_address     Shivmandir
1           1           csp_name        Shiv CSP
2           1           csp_address     Matigara
2           1           csp_name        Mat CSP
3           2           csp_address     Darjeeling
3           2           csp_name        Dar CSP
4           2           csp_address     Gangtok
4           2           csp_name        Gang CSP
这就是在前端显示日期的方式,我还需要一个带有日期、csp_名称等的排序

id  user_id csp_id  date        csp_name    csp_adress
1       1       1   2018-10-09  Shiv CSP    Shivmandir
2       1       1   2018-10-10  Mat CSP     Matigara
3       2       2   2018-10-09  Dar CSP     Darjeeling
4       2       2   2018-10-10  Gang CSP    Gangtok
我尝试过这个sql,但这不是我想要的

SELECT reports.*, reports_meta_values.meta_id, reports_meta_values.meta_value  FROM reports
INNER JOIN reports_meta_values WHERE reports.id = reports_meta_values.report_id


id  user_id     csp_id      date        meta_id         meta_value
1   1           1           2018-10-09  csp_address     Shivmandir
1   1           1           2018-10-09  csp_name        Shiv CSP
2   1           1           2018-10-10  csp_address     Matigara
2   1           1           2018-10-10  csp_name        Mat CSP
3   2           2           2018-10-09  csp_address     Darjeeling
3   2           2           2018-10-09  csp_name        Dar CSP
4   2           2           2018-10-09  csp_address     Gangtok
4   2           2           2018-10-09  csp_name        Gang CSP

我正在寻找一个在mysql或php如何解决这个问题的建议。谢谢

我自己找到了答案,这应该是以适当结构显示数据的sql

SELECT reports.*, mt1.meta_value AS CSP_NAME, mt2.meta_value AS CSP_ADDRESS
FROM reports
INNER JOIN reports_meta_values mt1 ON reports.id = mt1.report_id AND 
mt1.meta_id='csp_name'
INNER JOIN reports_meta_values mt2 ON reports.id = mt2.report_id AND 
mt2.meta_id='csp_address'
WHERE 1

谢谢

我花了一点时间在数据库中进行设置,但是您应该使用两个
内部连接来区分meta_值,然后根据需要排序

SELECT a.*, b.meta_value AS csp_name, c.meta_value AS csp_address
FROM reports a
INNER JOIN reports_meta_values b ON a.id = b.report_id AND b.meta_id = 'csp_name'
INNER JOIN reports_meta_values c ON a.id = c.report_id AND c.meta_id = 'csp_address'
ORDER BY date, csp_name, csp_address

如果您提供了表的SQL导出,我已经给出了答案。现在我不得不费心写下这些表格和数据。很抱歉打扰您,但我自己找到了答案,我使用以下查询来解决问题,选择reports.*,mt1.meta_值作为CSP_名称,mt2.meta_值作为来自报告的CSP_地址内部联接报告中的mt1.id=mt1.report_id和mt1.meta_id='CSP_name'内部联接报告中的mt2.id=mt2.report_id和mt2.meta_id='CSP_地址'您希望如何继续?您是希望删除问题以恢复丢失的代表分数,还是希望保持页面活动并接受答案?如果您希望删除该页面,我可以撤回我的答案以允许删除,