gpt4 book ai didi

php - 有没有更智能的方法来使用 PHP 和 MySQL 加载多对多关系?

转载 作者:行者123 更新时间:2023-11-29 13:35:16 25 4
gpt4 key购买 nike

假设您有多对多关系中的用户角色。标准设置如下表:

user            role           user_role
user_id role_id user_id
email name role_id

最好使用尽可能少的查询,向所有用户加载属于他们的所有标签的好方法是什么?也就是说,我希望最终得到的用户都具有一系列角色。

<小时/>

我目前正在考虑使用以下内容,这需要两个查询。

  1. 获取具有群组串联角色 ID 的所有用户。
  2. 在单独的查询中获取所有角色名称
  3. 循环遍历用户,分解角色 ID,并将其与角色查询中的名称连接起来。

有什么好的/更好/更高效/更清洁/更快的替代方案吗?有什么好的方法可以在单个查询中执行此操作吗?

最佳答案

返回所有用户的所有角色

<?php
$array=array();
$sql='SELECT user.email,role.name
FROM user
INNER JOIN user_role ON user_role.user_id=user.user_id
INNER JOIN role ON user_role.role_id=role.role_id';

$stmt = db::db()->query($sql);
while($row=$stmt->fetch(PDO::FETCH_ASSOC))
{
if (!isset($array[$row['email']])){$array[$row['email']]=array();}
array[$row['email']][]=$row['name'];
}

?>

返回单个用户的所有角色

<?php
$sql='SELECT user.email,role.name
FROM user
INNER JOIN user_role ON user_role.user_id=user.user_id
INNER JOIN role ON user_role.role_id=role.role_id
WHERE user.email=?';

$stmt = db::db()->prepare($sql);
$stmt->execute(array('anEmail@domain.com'));
$roles=$stmt->fetchAll(PDO::FETCH_ASSOC);
?>

以上假设所有用户至少拥有一个角色。如果没有,请使用外连接。

关于php - 有没有更智能的方法来使用 PHP 和 MySQL 加载多对多关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18832979/

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