ここがシナリオです。私はさまざまなレベルのユーザーを持っています。 admin - > reseller - > marketing - > autoserviceMySQL - メンバーによって作られたメンバーを選択する
特定の再販業者が作成したすべての自動サービスを選択するSQLクエリを作成しようとしています。 autoservice1、autoservice2、autoservice3、autoservice4、autoservice5、autoservice6とそのすべてのフィールドを選択する必要があり
+----+--------+--------------+-------------+-----------+
| 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 |
+----+--------+--------------+-------------+-----------+
クエリ:すべてのユーザは、次の簡単な構造を持っているユーザーテーブルに保存されています。私は現在、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();
は、その後の結果を通してIループ:
$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;
}
これは動作しますが、非常に非効率的であると思われます。どのように私はこの1つのSQLクエリでこれを行うことができますか?
あなたがテーブルの概略を追加してくださいことはできますか? 'マーケティング担当者 'と'オートサービス'という2つのテーブルがありますか?もしそうなら、 'createdby'フィールドに_marketer_のIDを使わないのはなぜですか? – EhsanT