我做了一个mysql查询,从不同的列中选择数据。 但是结果花费的时间太长。我应该如何更改查询以使其更快?
(表格)
-- tb_computer --
machine_name
ip
mac
emp_no
...
-- tb_user_info--
emp_no
name
company_id
...
没有重复的用户信息 但是每个用户可以有重复的计算机数据。
SELECT
ui.emp_no, u.name, u.position, d.name as dept_name, u.activeYN
,IFNULL((SELECT over_time FROM tb_work_time wt WHERE wt.emp_no = u.emp_no AND wt.work_date = '$_today'), '') AS over_time
,CASE WHEN ui.updatedTime >= NOW() - INTERVAL 5 minute THEN 'Y' ELSE 'N' END connectYN
,IFNULL(ui.machine_name , '') AS machine_name
,IFNULL((SELECT ip FROM tb_computer c WHERE c.emp_no = ui.emp_no), '') AS ip
,IFNULL((SELECT mac FROM tb_computer c WHERE c.emp_no = ui.emp_no), '') AS mac
FROM tb_user_info ui
INNER JOIN tb_user u ON u.emp_no = ui.emp_no
INNER JOIN tb_user_dept ud ON u.emp_no = ud.emp_no
INNER JOIN tb_dept d ON ud.dept_id = d.dept_id
由于
,IFNULL((SELECT ip FROM tb_computer c WHERE c.emp_no = ui.emp_no), '') AS ip
,IFNULL((SELECT mac FROM tb_computer c WHERE c.emp_no = ui.emp_no), '') AS mac
部分花费的时间太长。 如果没有计算机数据,那么我只想打印出空的ip,mac和其余信息。
例如)
emp_no || name || machine_name || ip || mac
1234 || test || computer || 1.1.1.1 || ABCD
1234 || test || computer1 || 1.1.1.2 || FETR
777 || testing || ASUS || 2.2.2.2 ||
888 || ttttt || NON || 3.3.3.3 || MFMFMF
如您所见,如果(A)用户有两台计算机,它应该打印出两行