gpt4 book ai didi

php - 如何从多个表中高效地sql查询子记录?

转载 作者:搜寻专家 更新时间:2023-10-31 20:56:04 24 4
gpt4 key购买 nike

我们有一个简单的数据库。用户表包含用户。 Accounts 表为每个用户保存多个帐户。主题表包含每个帐户的多个主题。

因此,一个用户将有多个帐户,每个帐户将有多个主题。那么,如果我有一个 id=1 的用户,我该如何有效地查询所有 3 个表以获取该用户的所有帐户和主题?

我目前正在使用运行许多 sql 查询的 foreach 循环。有没有办法只运行一个 sql 查询来获得我想要的东西??

这是我目前使用的代码(即 CodeIgniter 代码):

$data=array();
$accounts=$this->db->get_where('accounts',array('user_id'=>1));
foreach ($accounts->result() as $account) {
$tmp=array();
$topics=$this->db->get_where('topics',array('account_id'=>$account->id));
foreach ($topics->result() as $topic) {
$this->db->order_by($order_by);
$terms=$this->db->get_where('terms',array('topic_id'=>$topic->id));
array_push($tmp,array('topic'=>$topic, 'terms'=>$terms->result()));
}
array_push($data,array('account'=>$account, 'topics'=>$tmp));
}
return $data;

最佳答案

简单的一对多与另一个一对多。

用户->许多帐户

帐户->多个主题

想想你的用户表,其中一行是唯一的(包含一个用户,比如 Jon Doe)。考虑引用某种用户的帐户表(即多个帐户可以包含同一用户,此外,帐户 Acme 1 和 Acme 2 都属于用户 Jon Doe)。最后,想一想包含对帐户的引用的主题表。那就是每个主题都有一个帐户ID。因此,这意味着帐户有许多与之相关的主题。

SELECT
u.UserID,
a.Account
t.Topic
FROM
Users u
INNER JOIN
Accounts a
ON u.UserID = a.UserID
INNER JOIN
Topics t
ON t.AccountID = a.AccountID

如果你想缩小一个用户的范围,只需添加一个 WHERE 子句:

SELECT
u.UserID,
a.Account
t.Topic
FROM
Users u
INNER JOIN
Accounts a
ON u.UserID = a.UserID
INNER JOIN
Topics t
ON t.AccountID = a.AccountID
WHERE u.UserID=1

关于php - 如何从多个表中高效地sql查询子记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2297424/

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