我需要一些帮助,我有两个桌子,
- 主管表
(supervisor_id, name, area_specialty, branch)
,以及 - 任务表
(t_id, no_task, supervisor_id)
我正在尝试制定一个查询,该查询可以过滤具有给定area of specialty
和给定branch
的主管。
获取他们的 ID 后,我需要通过任务表循环 ID,以获得一个任务(no_task)
最少的 ID。
以下是我尝试过的内容,但似乎无法获得正确的结果
$query2 = mysqli_query($connection, "SELECT * FROM supervisors WHERE area_specialty LIKE '%Embedded systems%' AND branch LIKE '%boston%'");
while($rows =mysqli_fetch_array($query2)) {
$sid =$rows['supervisor_id'];
$query1=mysqli_query($connection,"SELECT * from tasks INNER JOIN(select t_id, supervisor_id,MIN(no_task) AS nTask FROM tasks Group By supervisor_id) AS task_1 On task_1.t_id=task.t_id Where task_1.nTask=task.no_task");
$rm = mysqli_fetch_array($query1);
}
echo $rm['supervisor_id'];
当您可以在查询中简单地使用一些内部连接时,不确定为什么要执行循环。稍后,当您的表很大并且您正在循环这些查询和连接时,您会遇到性能问题。如果没有太多细节,我会做这样的事情:
select * from supervisor_table as s
inner join tasks_table as t
on t.supervisor_id = s.supervisor_id
where s.area_specialty like '%Embedded systems%' AND s.branch like '%boston%';
查询将根据您的要求提供任务列表:
SELECT t.* FROM task AS t
INNER JOIN (
SELECT MIN(no_task) AS MinTask FROM tasks Group By supervisor_id
INNER JOIN supervisor_table AS s ON t.supervisor_id = s.supervisor_id
WHERE area_specialty LIKE '%Embedded systems%' AND branch LIKE '%boston%'
) as Task1 ON Task1.MinTask = t.no_task
联接中的子查询将获取具有给定区域专业和分支的主管的最小任务数。