gpt4 book ai didi

php - 如何使用 nl2br 从另一个表中回显连接名称的结果

转载 作者:行者123 更新时间:2023-11-29 18:07:31 25 4
gpt4 key购买 nike

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

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'])

关于php - 如何使用 nl2br 从另一个表中回显连接名称的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47702113/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com