gpt4 book ai didi

php - mysql从指向同一个表的多个外键中select数据

转载 作者:行者123 更新时间:2023-11-28 23:13:00 24 4
gpt4 key购买 nike

我有两个表:

模块:

+-------------+---------+
| Field | Type |
+-------------+---------+
| id | int(11) |
| title | int(11) | <- foreign key to texts
| description | int(11) | <- foreign key to texts
| goal | int(11) | <- foreign key to texts
| sp1 | int(11) | <- foreign key to texts
| sp2 | int(11) | <- foreign key to texts
+-------------+---------+

文本:

+---------+--------------+
| Field | Type |
+---------+--------------+
| id | int(11) |
| name | varchar(100) |
| text | text |
| is_html | tinyint(1) |
+---------+--------------+

有了这个:

SELECT modules.title, modules.description from modules;

我只从 texts 中获取行的 ID。

如何从texts查询text字段的值?

许多其他答案只有一个外键,或者不同表中的外键。

编辑:一些文本被多次使用。

最佳答案

使用此设计,您必须加入 texts为每个映射的文本字段创建一次表。在您的情况下,对于 titledescription它将是:

SELECT title.text as title, descr.text as description
FROM modules
JOIN texts as title on title.id = modules.title
JOIN texts as descr on descr.id = modules.description

如果此类查询的数量有限,这可能没问题。但如果你有很多,我会重新考虑设计。

但是,如果您对这种设计有很好的理由,请考虑使用缓存 texts 的数组在 PHP 中映射文本。表。

例如:每次更新texts表,你获取数据并将其存储在缓存文件中,如 cache/texts.php看起来像

<?php
const TEXTS = array(
1 => 'some title',
2 => 'some description',
// ...
);

然后你可以写一个像这样的函数

function getText($textId) {
require_once 'cache/texts.php';
return TEXTS[$textId];
}

像这样使用它

echo '<td>' . getText($row[title]) . '</td>';

或者用模板引擎看起来像

<td>{{ module.title|getText }}</td>
<td>{{ module.description|getText }}</td>

这可能不是最好的解决方案。但它很简单,可以为您节省大量 SQL 中的 JOIN。

关于php - mysql从指向同一个表的多个外键中select数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45120138/

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