【问题标题】:Putting select count data into a Fetch Array Query row PHP将选择计数数据放入 Fetch Array Query 行 PHP
【发布时间】:2014-02-05 23:01:42
【问题描述】:

我有一个脚本可以从“users”表中检索具有相同“dealership_id”的所有用户,这很好用。这些记录中的每个用户都有一个 ID (users_sales_guild_id),它也在另一个名为“sales_list”的表中。

我要做的是从相应用户旁边的“sales_list”表中列出每个用户的总销售额

目前它打印登录用户的金额(John Smith,值为 5),而不是每个单独的金额,我哪里出错了?

我希望它看起来如何

Name         |   Position          |    SID    |  Total Sales |  
John Smith   |   Sales Consultant  |    23434  |  5           |   Details
Jane Smith   |   Sales Consultant  |    34234  |  9           |   Details
John Chan    |   Sales Manager     |    43423  |  3           |   Details
Jane Chan    |   Sales Consultant  |    23344  |  7           |   Details

外观

Name         |   Position          |    SID    |  Total Sales |  
John Smith   |   Sales Consultant  |    23434  |  5           |   Details
Jane Smith   |   Sales Consultant  |    34234  |  5           |   Details
John Chan    |   Sales Manager     |    43423  |  5           |   Details
Jane Chan    |   Sales Consultant  |    23344  |  5           |   Details

PHP 代码

$query = "SELECT `users_id`, `users_email` , `users_sales_guild_id` , `users_dealer_code_id` , 
      `users_first_name` , `users_surname` , `users_dealer_name` , `users_type` ,  DATE_FORMAT(`registration_date`, '%d-%m-%Y') 
      AS `dr` 
      FROM `users` 
      WHERE  `dealership_id` = '".$_SESSION['dealership_id']."'
      AND (users_type = 'Sales Manager' OR users_type = 'Sales Consultant')
      ORDER BY registration_date DESC";

$result = mysql_query("SELECT * FROM sales_list WHERE sales_list.users_sales_guild_id ='" . $_SESSION['users_sales_guild_id'] . "'");
$num_rows = mysql_num_rows($result);

$result = @mysql_query ($query); // Run the query.

echo '<table>
<tr>
<td align="center">Name</td>
<td align="center">Position</td>
<td align="center">ID</td>
<td align="center">Total Sales</td>
<td align="center"></td>
</tr>';

$bg = '#ffffff'; // Set the background color.
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {

$bg = ($bg=='#e1e3e6' ? '#cdcdcf' : '#e1e3e6'); // Switch the background color.   
echo '<tr bgcolor="' . $bg . '">';

echo  '<td align="center">' . $row['users_first_name'] . ' ' . $row['users_surname'] . '    </td>';
echo  '<td align="center">' . $row['users_type'] . '</td>';
echo  '<td align="center">' . $row['users_sales_guild_id'] . '</td>';

echo  '<td align="center">' . $num_rows . '</td>';

echo  '<td align="center"><a href="sm-sales-ind-2.php?smid=' . $row['users_id'] . '">Details</td>'; 
}
echo '</table>';

mysql_free_result ($result); // Free up the resources.

mysql_close(); // Close the database connection.
?>

【问题讨论】:

    标签: php mysql arrays row fetch


    【解决方案1】:

    你必须添加一个子查询加入你的 sql,类似于:

    加入:

    SELECT name, COUNT(sales_list.*)
    FROM salesman
    JOIN sales_list ON salesman.id = sales_list.salesman_id
    GROUP salesman.id
    

    子查询:

    SELECT
      name,
      (SELECT COUNT(*) FROM sales_list 
       WHERE salesmen.id = sales_list.salesman.id) as sales_count
    FROM salesmen
    

    然后你可以在输出中使用$row['sales_count']

    $num_rows 是指返回的行数,它不包含任何特定的每位用户的销售额

    【讨论】:

    • 虽然这可能有效,但加入和分组会获得更好的结果。
    • 按版本更新加入/组
    • 当我想计算事物时,我通常会选择加入/组。但是我突然想到加入/组,有一个小问题。内部联接将从销售人员中排除没有销售行的行,如果您离开联接,则在没有销售时将返回计数 1(您将获得具有空值的销售行)。我通常对进行内部连接并保留这些结果没有问题,但如果 OP 想要显示它们,子查询可能会更好。
    • 我会尝试子查询并加入,会告诉你进展如何
    • 我有点困惑,我的数据库中没有“salesman”或“name”表,我应该使用什么?
    猜你喜欢
    • 2015-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-19
    相关资源
    最近更新 更多