繁体   English   中英

如何使用nl2br回显来自另一个表的联接名称的结果

[英]How to echo results with join names from another table using nl2br

我知道如何使用以下命令回显数组中的结果

nl2br(str_replace(',', "\n", $row['column-name']))

现在,我有一列,其中列出的项目(用逗号分隔)是与另一个表相对应的ID号。

我如何回显这些结果并相对于其ID应用与该项目关联的名称?

我已经尝试过INNER JOIN,但是我似乎缺少如何正确执行此操作。

'SELECT * FROM Table1 
 INNER JOIN Table2 ON Table1.ColumnName = Table2.ColumnID
 INNER JOIN Table3 ON Table1.ColumnID2 = Table3.ColumnID2 <-- This needs to apply names to the number-ids split by the nl2br
 ORDER BY OrderColumn'

<span>'.nl2br(str_replace(',', "\n", $row['table3-column-name-to-replace-table1-columnID2'])).'</span>

谢谢你的帮助。

这是预期的结果。 https://drive.google.com/file/d/1ChGv9qHeJPgtwVcxbqj8ey-1RjVTah28/view?usp=sharing

要获取出现在Table1列表中的所有Table3行,您需要相应地更改JOIN:

SELECT 
    Table1.CoverageArea,
    Table2.stateName as State,
    GROUP_CONCAT(Table3.CountName SEPARATOR '\n') as County
FROM 
    Table1 
    INNER JOIN Table2 
        ON Table1.State = Table2.ID
    INNER JOIN Table3 
        ON Table1.Counties LIKE Table3.ID+ ',%'
        OR Table1.Counties LIKE '%,' + Table3.ID+ ',%'
        OR Table1.Counties LIKE '%,' + Table3.ID
        OR Table1.Counties = Table3.ID
GROUP BY TABLE1.CoverageArea
ORDER BY TABLE1.CoverageArea ASC;

结果将是:

[
    ['John Doe', 'Missouri', 'Apple County
                              Orange County
                              Grape County
                              Banana County']
]

不利的一面是,数据库需要在每一行上执行多个文本比较,这意味着这是执行JOIN的非常慢的方法。

更好的解决方案是编辑Table3使其不仅拥有自己的ID,而且还拥有Table1的ID作为外键/父引用。

START TRANSACTION;
ALTER TABLE Table3 ADD coverageAreaID INT NOT NULL;
ALTER TABLE Table3 ADD CONSTRAINT fk_covarea_state FOREIGN KEY (coverageAreaID) REFERENCES Table1(ID);
UPDATE Table3 SET coverageAreaID = (
    SELECT 
        Table1.ID 
    FROM 
        Table1
    WHERE
        Table1.Counties LIKE Table3.ID + ',%'
        OR Table1.Counties LIKE '%,' + Table3.ID + ',%'
        OR Table1.Counties LIKE '%,' + Table3.ID 
        OR Table1.Counties = Table3.ID 
    LIMIT 1;
);
COMMIT;

这样,您可以使用以下SQL查询:

SELECT 
    Table1.CoverageArea,
    Table2.stateName as State,
    GROUP_CONCAT(Table3.CountName SEPARATOR '\n') as County
FROM 
    Table1 
    INNER JOIN Table2 
        ON Table1.State = Table2.ID
    INNER JOIN Table3 
        ON Table1.ID = Table3.coverageAreaID 
GROUP BY TABLE1.CoverageArea
ORDER BY TABLE1.CoverageArea ASC;

现在,此查询将导出与上面相同的结果,但是它将更快,因为它可以通过简单的数字比较将表连接在一起。

现在,使用代码应该没有问题:

nl2br($ row ['County'])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM