1

简化的数据库设置

表:客户字段:clientId(autoinc/primary)、customerId、clientName

表:项目字段:projectId(autoinc/primary)、customerId、projectName

表:项目字段:itemId(autoinc/primary)、customerId、itemName

询问:

include('includes/conn.inc.php'); 
$query = "SELECT customerId 
         FROM items, projects, clients 
         WHERE customerId= 135";
$stmt = $mysql->prepare ($query);
$stmt->execute();
$stmt->bind_result($customerId);

while($row = $stmt->fetch()) : 
      echo $customerId;
endwhile; $stmt->close();

问题:查询有什么问题?温柔点,我第一次尝试找出连接。我尝试了很多不同的方法,但无法让它们中的任何一个起作用,这似乎是我想做的最简单和最能解释的方法。每个表上都有一个对应的条目(customerId=135),所以如果查询有效,我希望它返回其中的 3 个。错误:在非对象上调用执行

提前感谢大家

- - - - 更新

感谢大家的帮助!我实际上是通过使用这个查询让它工作的:

        SELECT clients.customerId, projects.customerId, items.customerId 
        FROM clients, projects, items 
        WHERE  clients.customerId = projects.customerId AND   
        projects.customerId = items.customerId;

虽然这看起来有点笨拙,尤其是最后。如果有人知道“WHERE table.column = table.column = table column”的简写,考虑到它们都是 3 个相同的值,那就太好了。

4

4 回答 4

1

好吧,没有加入。您至少需要定义这些表之间的隐式关系,如下所示:

SELECT customerId 
FROM items, projects, clients 
WHERE clients.customerId = projects.customerId
AND items.customerId = projects.customerId
AND clients.customerId= 135

但是,您应该像这样使用显式连接:

SELECT client.customerId
FROM clients
LEFT JOIN projects ON projects.customerId = clients.customerId
LEFT JOIN items ON items.customerId = clients.customerId
WHERE clients.customerId = 135
于 2012-10-04T21:04:28.230 回答
0

我可能遗漏了一些东西,但您没有明确加入查询中的任何位置。相反,每列的每一行将与其他表的每一行连接。

如果你有三个包含 abc、123 和 !@# 的表,你会得到

a   1   !
a   1   @
a   1   #
a   2   !
...

要正确加入,您需要做更多类似的事情

select customerId
from clients c
join project p on p.customerId = c.id
join items   i on i.customerId = c.id
where customerId = 135;

但是,假设您为客户 ID 提供 where 子句并选择客户 ID,您将返回 count(p) * count(i) 行,每行仅包含客户 ID 135。

于 2012-10-04T21:05:26.373 回答
0

你应该在你的表上指定连接条件,像这样

SELECT customerId 
     FROM items i, projects p, clients c
     WHERE i.customerId = p.customerId AND p.customerId = c.customerId 
        AND customerId= 135

以上从具有相等的表中合并行customerId

于 2012-10-04T21:06:40.540 回答
0
    SELECT clients.customerId, projects.customerId, items.customerId 
    FROM clients, projects, items 
    WHERE  clients.customerId = projects.customerId AND   
    projects.customerId = items.customerId;
于 2013-07-11T14:45:26.910 回答