[英]inner join not working
大家好,请帮我解决这个从四个表中获取数据的查询。 这是编写查询的正确方法吗?
SELECT task.employee_id , task.user_id , task.service_id from task
INNER JOIN employee employee.name , employee.pic ON employee.pno =employee_id
INNER JOIN user user.name , user.pic ON user.pno = user_id
INNER JOIN service service.name , service.description ON service.service_id =service_id";
当我获取数据时我将如何显示它们$ a = $ data ['id'];
它出现了错误
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result,
现在我已更新到此
function viewAll()
{
$this->query = "SELECT task.employee_id , task.user_id , task.service_id, employee.name , employee.pic, user.name , user.pic, service.name , service.description
FROM task INNER JOIN employee ON employee.pno = task.employee_id INNER JOIN user ON user.pno = employee.user_id INNER JOIN service ON service.service_id = user.service_id;";
$rd = $this->executeQuery();
$recordsArray = array(); // create a variable to hold the informationm
while (($row = mysqli_fetch_array($rd)) ){
$recordsArray[] = $row; // add the row in to the results (data) array
}
我收到了这个错误
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result,
不,这不正确。
SELECT task.employee_id , task.user_id , task.service_id, employee.name , employee.pic, user.name , user.pic, service.name , service.description
FROM
task
INNER JOIN employee ON employee.pno = task.employee_id
INNER JOIN user ON user.pno = employee.user_id
INNER JOIN service ON service.service_id = user.service_id;
我不能告诉你它应该是什么,但那应该更接近 。 我根据原始查询对你的连接和列名做了最好的猜测。 您想要“查看”的所有字段都需要在SELECT
子句中。 当你加入另一张桌子时,你需要解释如何。 例如,您正在从task
加入employee
因此我假设该task
有一个名为emmployee_id
(或类似)的列,这是您需要加入的字段。
您的查询应该类似于:
SELECT t.employee_id,
t.user_id,
t.service_id
FROM TASK t
JOIN EMPLOYEE e ON e.pno = t.employee_id
JOIN USER u ON u.pno = t.user_id
JOIN SERVICE s ON s.service_id = t.service_id
但是对于您的查询,存在重复行的风险,因为EMPLOYEE,USER和SERVICE的JOIN在所有这些行中都有相关记录,或者其中一个表具有多个相关子记录。 采用:
SELECT DISTINCT
t.employee_id,
t.user_id,
t.service_id
FROM TASK t
JOIN EMPLOYEE e ON e.pno = t.employee_id
JOIN USER u ON u.pno = t.user_id
JOIN SERVICE s ON s.service_id = t.service_id
在不使用DISTINCT(或GROUP BY)的情况下编写查询的另一种方法是:
SELECT t.employee_id,
t.user_id,
t.service_id
FROM TASK t
WHERE EXISTS (SELECT NULL FROM EMPLOYEE e WHERE e.pno = t.employee_id)
AND EXISTS (SELECT NULL FROM USER u WHERE u.pno = t.user_id)
AND EXISTS (SELECT NULL FROM SERVICE s WHERE s.service_id = t.service_id)
$a = $data['id'];
使用PHP代码中的列名称或列别名(如果已定义)来获取适当的值:
$a = $data['employee_id'];
$b = $data['user_id'];
$c = $data['service_id'];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.