【问题标题】:PHP script and MYSQL query return different (and undesirable) dataPHP 脚本和 MYSQL 查询返回不同的(和不需要的)数据
【发布时间】:2013-09-07 01:45:29
【问题描述】:

我有一个表,我从中选择“项目经理”并提取有关他们的数据。

他们每个人都有许多他们管理的“客户”。

客户通过名称链接到他们的项目经理。

例如:John Smith 有 3 个客户。这些客户中的每一个都有自己的名字,称为“经理”。

这是表格的简单版本:

name       | type    | manager
--------------------------------------
John Smith | manager |
Client 1   | client  | John Smith
Client 2   | client  | John Smith
Client 3   | client  | John Smith
John Carry | manager |
Client 4   | client  | John Carry
Client 5   | client  | John Carry
Client 6   | client  | John Carry

我要返回以下数据:

约翰·史密斯 - 3 个客户

John Carry - 3 个客户

我使用这个查询返回数据:

select t.name,
  count(t1.name) TotalClients
from yourtable t
inner join yourtable t1
  on t.name = t1.manager
group by t.name;

http://sqlfiddle.com/#!2/d72a87/2

这在 phpMyAdmin 和小提琴中正常工作,但是当我使用 PHP 脚本(一个简单的查询和 $row['name'] 的回显)时,它选择了最后一个被计数的客户端(客户端 3)但是没有为 John Smith 返回正确的 Total Clients 值。

如何使 php 脚本返回与 sql 相同的结果?

PHP 脚本:

$sql = mysql_query("select t.name,
      count(t1.name) TotalClients
    from users t
    inner join users t1
      on t.name = t1.manager
    group by t.name;");

while($row = mysql_fetch_assoc($sql)){
    echo $row['name'];
    echo $row['TotalClients'];
}

名称返回不正确的值; TotalClients 返回正确的值

【问题讨论】:

  • 显示实际的 PHP 代码。您可能正在获取/显示问题,并且查询不会有问题。
  • from users t inner join yourtable t1from yourtable t inner join yourtable t1 略有不同不是吗?
  • 经理和客户是否保存在同一张表中?
  • @u_mulder 是的。只是忘记复制了
  • @LiamAllan 是的,如上所示..

标签: php mysql sql


【解决方案1】:

您没有显示问题。您的小提琴示例有效,它在 PHP 中也应该可以正常工作。但小提琴的例子不是你的现实。表用户在哪里?也许是你的错误。

无论如何,您的查询似乎过于多余。您可以使用更简单的方法获得相同的结果:

SELECT
    `manager`,
    COUNT(*)
FROM
    `yourtable`
WHERE
    `type` = 'client'
GROUP BY
    `manager`;

当然,除非您也希望显示具有 0 个客户的经理,在这种情况下,您需要使用 LEFT JOIN 进行更详细的说明:

SELECT
    `manager`.`name`,
    COUNT(`client`.`name`) `TotalClients`
FROM
    `yourtable` `manager`
LEFT JOIN
    `yourtable` `client`
ON
    `manager`.`name` = `client`.`manager`
WHERE
    `manager`.`type` = 'manager'
GROUP BY
    `manager`.`name`;

【讨论】:

  • 第一个查询根本不起作用。第二个做了魅力。谢谢!
猜你喜欢
  • 1970-01-01
  • 2021-08-17
  • 2013-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-17
  • 1970-01-01
相关资源
最近更新 更多