Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在sql中按两列进行分组?_Php_Mysql_Mysqli - Fatal编程技术网

Php 如何在sql中按两列进行分组?

Php 如何在sql中按两列进行分组?,php,mysql,mysqli,Php,Mysql,Mysqli,我有两张桌子,一张是“活动”,第二张是“门票”: 事件表: ============================ | event_id | event_name | ============================ | 101 | Running Event | | 102 | Cycling Event | ============================ 票务表: ========================================

我有两张桌子,一张是“活动”,第二张是“门票”:

事件表:

============================
| event_id |   event_name  |
============================
|   101    | Running Event |
|   102    | Cycling Event |
============================
票务表:

==============================================================
| ticket_id | event_id | ticket_number | ticket_generate_date|
==============================================================
|    1      |    101   |    40001      |  2018-08-21 17:05   |
|    2      |    101   |    40002      |  2018-08-21 18:05   |
|    3      |    102   |    40001      |  2018-08-21 19:05   |
|    4      |    101   |    40003      |  2018-08-23 20:05   |
|    5      |    101   |    40004      |  2018-08-24 20:05   |
==============================================================
现在我希望运行查询,以便我的输出如下所示:

================================================
| count ticket |   event_name  | day wise data |
================================================
|       2      | Running Event |  2018-08-21   |
|       1      | Cycling Event |  2018-08-21   |
|       1      | Running Event |  2018-08-23   |
|       1      | Running Event |  2018-08-24   |
================================================
我尝试了以下查询:

SELECT COUNT(ticket_id), ticket_generate_date FROM Tickets 
WHERE ticket_generate_date >= DATE_FORMAT(curdate(), '%Y-%m-01') 
GROUP BY DATE_FORMAT(ticket_generate_date, '%d-%b');

您只需将第二个组选项添加到已有的选项中,并使用逗号

我还使用别名和内部联接来获取事件名称

SELECT 
    COUNT(t.ticket_id),
    e.event_name,
    DATE_FORMAT(t.ticket_generate_date, '%Y-%m-%d') as day_wise
FROM 
    Tickets t
INNER JOIN
    Events e ON e.event_id = t.event_id
WHERE 
    t.ticket_generate_date >= DATE_FORMAT(curdate(), '%Y-%m-01') 
GROUP BY 
    DATE_FORMAT(t.ticket_generate_date, '%Y-%m-%d'), e.event_name
它在这里工作:

如果在
group by
子句中包含一个额外的列名-在本例中,我选择了
事件\u name
,则最终输出或多或少与预期一致。要输出请求的所有详细信息,尽管您需要连接两个表(或使用嵌套的select)

或者,为了进一步细化结果,您可以按日期排序

select 
    count( t.id ) as 'sales',
    e.`event_name` as `event`,
    date_format( t.`ticket_generate_date`, '%y-%m-%d' ) as `day wise data`
from `tickets` t
    join `events` e on e.`event_id`=t.`event_id`
where t.`ticket_generate_date` >= date_format( curdate(), '%y-%m-01' )
group by e.event_name, date_format( t.`ticket_generate_date`, '%d-%b' )
order by `day wise data`;

+-------+---------------+---------------+
| sales | event         | day wise data |
+-------+---------------+---------------+
|     2 | Running Event | 18-08-21      |
|     1 | Cycling event | 18-08-21      |
|     1 | Running Event | 18-08-23      |
|     1 | Running Event | 18-08-24      |
+-------+---------------+---------------+
试试这个:

select sum(ticket)id) ticket_count
       (select event_name from Events where event_id = t.event_id) event_name,
       cast(ticket_generate_date as date)
from Tickets t
group by event_id, cast(ticket_generate_date as date)

到目前为止你都试了些什么,桑托什?你试过什么吗?你有一个示例代码吗?@Rafael我尝试过这个查询选择计数(票证id),票证生成日期从票证中
ticket\u生成日期
>=日期格式(curdate(),'%Y-%m-01')按日期分组格式(
ticket\u生成日期
,'%d-%b')Santosh,请将此添加到主任务中,以便每个人都能阅读它。:)可能重复的
select sum(ticket)id) ticket_count
       (select event_name from Events where event_id = t.event_id) event_name,
       cast(ticket_generate_date as date)
from Tickets t
group by event_id, cast(ticket_generate_date as date)