繁体   English   中英

内部联接不起作用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM