和我的预期结果
-------------------------------------------------------------
| doc_id | document_name | requirement_id |requirement_name |
-------------------------------------------------------------
| 1 |Certifications | 3 | requirementname |
| | | 1 | requirementname |
| | | 7 | requirementname |
| | | 9 | requirementname |
| 2 |CAV | 1 | requirementname |
| | | 4 | requirementname |
| | | 3 | requirementname |
| | | 5 | requirementname |
-------------------------------------------------------------
此输出是否可以使用 PHP 在 HTML 中显示?有人可以告诉我怎么做吗? 这与外键和连接表有关吗? 提前致谢。
最佳答案
构建一个 sqlfiddle 会很有帮助对于诸如此类的问题,以便审阅者可以遵循通用的模式/数据集。给定以下架构:
CREATE TABLE `document` (
`document_id` INT(11) PRIMARY KEY AUTO_INCREMENT,
`document_name` VARCHAR(64) DEFAULT NULL,
`document_amount` INT(4),
`requirement1` INT(11) DEFAULT 0,
`requirement2` INT(11) DEFAULT 0,
`requirement3` INT(11) DEFAULT 0,
`requirement4` INT(11) DEFAULT 0,
`requirement5` INT(11) DEFAULT 0,
`requirement6` INT(11) DEFAULT 0,
`requirement7` INT(11) DEFAULT 0
);
CREATE TABLE `requirement` (
`requirement_id` INT(11) PRIMARY KEY AUTO_INCREMENT,
`document_id` INT(11) DEFAULT 0,
`requirement_name` VARCHAR(64) DEFAULT NULL
);
主要障碍是每个文件的要求是非规范化的;可能有多达 7 个不同的需求选项分布在每个文档栏中。为此,您需要将它们组合在一起,使它们代表一个列,这可以通过 union 完成:
SELECT `document_id`, `requirement1` as 'requirement' FROM `document`
UNION
SELECT `document_id`, `requirement2` as 'requirement' FROM `document`
UNION
SELECT `document_id`, `requirement3` as 'requirement' FROM `document`
UNION
SELECT `document_id`, `requirement4` as 'requirement' FROM `document`
UNION
SELECT `document_id`, `requirement5` as 'requirement' FROM `document`
UNION
SELECT `document_id`, `requirement6` as 'requirement' FROM `document`
UNION
SELECT `document_id`, `requirement7` as 'requirement' FROM `document`
然后您就可以将您的查询连接到所需的结果集中:
SELECT d.document_id, d.document_name, r.requirement_id, r.requirement_name FROM
`document` as `d` JOIN
(
# correct for non-normalization via UNION on requirements
SELECT `document_id`, `requirement1` as 'requirement' FROM `document`
UNION
SELECT `document_id`, `requirement2` as 'requirement' FROM `document`
UNION
SELECT `document_id`, `requirement3` as 'requirement' FROM `document`
UNION
SELECT `document_id`, `requirement4` as 'requirement' FROM `document`
UNION
SELECT `document_id`, `requirement5` as 'requirement' FROM `document`
UNION
SELECT `document_id`, `requirement6` as 'requirement' FROM `document`
UNION
SELECT `document_id`, `requirement7` as 'requirement' FROM `document`
) `req`
ON d.document_id = req.document_id
JOIN `requirement` as `r`
ON req.requirement = r.requirement_id
WHERE req.requirement > 0
ORDER BY d.document_id, r.requirement_id;
关于php - 如何将多个值分配给php/mysql中另一个表的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39211762/