通过php

时间:2016-04-02 07:59:03

标签: php mysql sql sql-server

我想从我的数据库表中获取这样的报告。

report

在撰写报告时应考虑的事项:

  1. 报告将根据所选日期生成。
  2. 两个数据库和两个表(已加入)'陈列室'和'客户'

  3. 陈列室有陈列室名称,每个陈列室都有客户的相关记录 表。一个展厅每天可能会有几个客户询问。

  4. 在一天之内可能会有来自每个展厅的询问。

  5. 假设一个月的第一天5个查询应该出现 在日期栏下面和特定展厅名称前面。

  6. 我从两个表中选择数据的查询工作正常。

    SELECT
        abans_crm.customers.added_date,
        abans_crm.customers.location_id
        FROM
        abans_crm.customers
        INNER JOIN sh_sso.showrooms ON sh_sso.showrooms.showroom_id = abans_crm.customers.location_id
        WHERE
        abans_crm.customers.added_location = -99 AND
        abans_crm.customers.type_id = 1
        ORDER BY
        abans_crm.customers.location_id ASC
    

    查询结果

    query result

    我标记的两个数据有两个不同的日期。 2016-02-09和2016-02-23。 '356'是showroom_id,因此报告的第9天列成为1,第23列成为1.希望你明白我的观点。我如何计算每个展厅的询问数量?

    到目前为止我写的代码片段。不知道后来写的

    <?php 
    
    echo $row->showroom_name;
    
    $conn = mysql_connect('localhost', 'root', 'Sate11it@') or die("Unable to connect to MySQL");
    
    mysql_select_db('sh_sso', $conn); 
    mysql_select_db('abans_crm', $conn);
    
    $query_3 = "SELECT
                    abans_crm.customers.added_date,
                    abans_crm.customers.location_id
                    FROM
                    abans_crm.customers
                    INNER JOIN sh_sso.showrooms 
                    ON sh_sso.showrooms.showroom_id = abans_crm.customers.location_id
                    WHERE
                    abans_crm.customers.added_location = -99 AND
                    abans_crm.customers.type_id = 1
                    ORDER BY
                    abans_crm.customers.location_id ASC";
    
    $retval = mysql_query($query_3);
    
    if(!$retval ) {
       die('Could not get data: ' . mysql_error());
    }
    
    $select_month = '2';                                   
    $select_year = '2016'; 
    
    $days = cal_days_in_month(CAL_GREGORIAN,$select_month,$select_year);
    
    while ($row2 = mysql_fetch_assoc($retval)){
    
        $year = date('Y',strtotime($row2['added_date']));
        $month = date('m',strtotime($row2['added_date']));
        $date = date('m',strtotime($row2['added_date']));
    
        $showroom_id = $row2['location_id'];
    
        if($year == $select_year && $month == $select_month){
    
            for($a = 1; $a <= $days; $a++){
               echo "<td id=".$a.">".$count."</td>"; 
            }
    
        }
     }
    ?>
    

    如果您需要更多详细信息,请在下方发表评论。

    客户表字段 cu_idcu_namecu_emailcu_addresscu_phonecu_remarkadded_datelast_update,{{ 1}},added_bystatus_idlocation_idcu_niccu_agecu_occcu_land,{{1} },purchase_typepref_modelpref_coloroth_modelpurchase_datecurrenrt_bikebike_yearatt_bycu_madeabout_herosource_idadded_ipdealer_flagadded_locationcur_milage

    陈列室表格字段 cat_idtype_idshowroom_idshowroom_codeshowroom_nameshowroom_addressaddress_citymanager_name,{{ 1}},manager_mobilemanager_idshop_emailshop_phoneshop_faxshowroom_typeadded_date,{{1} }

    谢谢。

1 个答案:

答案 0 :(得分:0)

我认为这应该可以解决问题:

SELECT DATE(abans_crm.customers.added_date) AS new_added_date
       COUNT(DATE(abans_crm.customers.added_date)) AS customer_amount,
       abans_crm.customers.location_id
FROM abans_crm.customers
INNER JOIN sh_sso.showrooms ON sh_sso.showrooms.showroom_id = abans_crm.customers.location_id
WHERE abans_crm.customers.added_location = -99 
AND abans_crm.customers.type_id = 1
GROUP BY abans_crm.customers.location_id, new_added_date
ORDER BY abans_crm.customers.location_id ASC, new_added_date ASC

我们使用DATE仅获取年,月,日部分。 然后我们GROUP BY同时location_id以及new_added_date,这样结果只会在年,月和日相同时进行分组。 我还在ORDER BY上添加了new_added_date,可能不是必需的