gpt4 book ai didi

php - MySQL - 选择由成员创建的成员

转载 作者:行者123 更新时间:2023-11-29 11:12:19 24 4
gpt4 key购买 nike

这是场景。我有不同级别的用户。用户创建过程是这样的:管理员 -> 经销商 -> 营销人员 -> 汽车服务

我正在尝试编写一个 SQL 查询来选择特定经销商创建的所有汽车服务。所有用户都保存在 users 表中,该表具有以下简化结构:

+----+--------+--------------+-------------+-----------+
| id | userid | username | role | createdby |
+----+--------+--------------+-------------+-----------+
| 1 | 334455 | reseller1 | reseller | admin |
| 2 | 245578 | marketer1 | marketer | reseller1 |
| 3 | 235677 | autoservice1 | autoservice | marketer1 |
| 4 | 253569 | autoservice2 | autoservice | marketer1 |
| 5 | 234267 | autoservice3 | autoservice | marketer1 |
| 6 | 245468 | marketer2 | marketer | reseller1 |
| 5 | 434567 | autoservice4 | autoservice | marketer2 |
| 5 | 532263 | autoservice5 | autoservice | marketer2 |
| 5 | 634262 | autoservice6 | autoservice | marketer2 |
+----+--------+--------------+-------------+-----------+

查询应选择 autoservice1、autoservice2、autoservice3、autoservice4、autoservice5、autoservice6 及其所有字段。目前我正在结合 MySQL 和 php 来完成此操作。首先,我选择 reseller1 创建的所有营销人员:

$sql="SELECT * FROM marketers WHERE createdby=:createdby";
$st=$conn->prepare($sql);
$st->bindvalue(":createdby",'reseller1',PDO::PARAM_STR);
$st->execute();
$usersArray=$st->fetchAll();
$NumberOfusers=$st->rowcount();

然后我循环遍历结果:

$MembersGeoData=array();
$MembersCount=0;
for($i=0;$i<$NumberOfusers;$i++) {
$sql="SELECT * FROM autoservices WHERE createdby=:createdby";
$st=$conn->prepare($sql);
$st->bindvalue(":createdby",$usersArray[$i]['username'],PDO::PARAM_STR);
$st->execute();
$tempUsersArray=$st->fetchAll();
$tempNumberOfusers=$st->rowcount();
$MembersGeoData=array_merge($MembersGeoData,$tempUsersArray);
$MembersCount+=$tempNumberOfusers;
}

这可行,但似乎效率很低。我怎样才能用一个sql查询来做到这一点?

最佳答案

假设您的层次结构完全正确(它永远不会被跳过,并且营销人员也不会创建另一个营销人员),那么:

select sa.*
from autoservices sm join
autoservices sa
on sa.role = 'autoservice' and
sm.role = 'marketer' and
sm.username = sa.createdBy
where sm.createdBy = 'reseller1';

你是对的。您应该让数据库完成这项工作。

关于php - MySQL - 选择由成员创建的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40350510/

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