Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.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
Mysql 查询月份帮助_Mysql - Fatal编程技术网

Mysql 查询月份帮助

Mysql 查询月份帮助,mysql,Mysql,嘿,我需要一些关于如何解决我的问题的有用提示/建议。我有一个数据库,里面有一个“注册”表。此表的日期格式如下: 2010-04-03 00:00:00 现在假设我在这个数据库中有10条记录: 2010-04-03 00:00:00 2010-01-01 00:00:00 2010-06-22 00:00:00 2010-02-08 00:00:00 2010-02-05 00:00:00 2010-03-08 00:00:00 2010-09-29 00:00:00 2010-11-16 00

嘿,我需要一些关于如何解决我的问题的有用提示/建议。我有一个数据库,里面有一个“注册”表。此表的日期格式如下:

2010-04-03 00:00:00
现在假设我在这个数据库中有10条记录:

2010-04-03 00:00:00
2010-01-01 00:00:00
2010-06-22 00:00:00
2010-02-08 00:00:00
2010-02-05 00:00:00
2010-03-08 00:00:00
2010-09-29 00:00:00
2010-11-16 00:00:00
2010-04-09 00:00:00
2010-05-21 00:00:00
我想得到每个月的总登记册。。。因此,按照上面的例子:

Jan = 1
Feb = 2
Mar = 1
Apr = 2
May = 1
Jun = 1
Jul = 0
Aug = 0
Sep = 1
Oct = 0
Nov = 1
Dec = 0
现在,我如何使用查询来实现这一点,而不必使用以下查询:

 WHERE left(date, 7) = '2010-01'
继续这样做12次?我希望它是一个查询调用,只需将月份访问放入如下数组:

 do until EOF
   theMonthArray[0] = "total for jan"
   theMonthArray[1] = "total for feb"
   theMonthArray[2] = "total for mar"
   theMonthArray[3] = "total for apr"
   ...etc
 loop
我只是想不出一个方法来做到这一点,除了我发布的12个查询示例,即每月一个查询

这是我目前的问题。同样,这只填充了一个月,我试图一次填充所有12个月

 SELECT count(idNumber) as numVisits, theAccount, signUpDate, theActive
 from userinfo
 WHERE theActive = 'YES'
 AND idNumber = '0203'
 AND theAccount = 'SUB'
 AND left(signUpDate, 7) = '2010-04'
 GROUP BY idNumber
 ORDER BY numVisits;
上面的示例查询输出以下内容:

 numVisits | theAccount | signUpDate          | theActive
 2           SUB          2010-04-16 00:00:00   YES
这是正确的,因为我在四月份有两个记录

但是,我再次尝试一次完成所有12个月的任务(在一个查询中),因此与执行12个不同的查询相比,我不会对数据库服务器产生太多的负担

更新 我希望按照以下思路做一些事情:

 if NOT rst.EOF
    if left(rst("signUpDate"), 7) = "2010-01" then
        theMonthArray[0] = rst("numVisits")
    end if        

    if left(rst("signUpDate"), 7) = "2010-02" then
        theMonthArray[1] = rst("numVisits")
    end if
    etc etc....
 end if
任何帮助都太好了!:)


David

您需要创建一个包含所有月份的派生表,并将其连接到您的查询中,以便在没有条目的月份中获得零计数,而不是缺少行。以下查询有点长,但应满足您的要求:

SELECT
    T1.`month`,
    COALESCE(numVisits, 0) AS numVisits
FROM (
    SELECT 1 AS month
    UNION ALL
    SELECT 2
    UNION ALL
    SELECT 3
    UNION ALL
    SELECT 4
    UNION ALL
    SELECT 5
    UNION ALL
    SELECT 6
    UNION ALL
    SELECT 7
    UNION ALL
    SELECT 8
    UNION ALL
    SELECT 9
    UNION ALL
    SELECT 10
    UNION ALL
    SELECT 11
    UNION ALL
    SELECT 12
) AS T1
LEFT JOIN (
    SELECT
        MONTH(signUpDate) AS `month`,
        COUNT(*) AS numVisits
    FROM userinfo
    WHERE theActive = 'YES'
    AND idNumber = '0203'
    AND theAccount = 'SUB'
    AND YEAR(signUpDate) = 2010
    GROUP BY MONTH(signUpDate)
) AS T2 ON T1.`month` = T2.`month`

您需要创建一个包含所有月份的派生表,并将其连接到您的查询中,以便为没有条目的月份获得零计数,而不是缺少行。以下查询有点长,但应满足您的要求:

SELECT
    T1.`month`,
    COALESCE(numVisits, 0) AS numVisits
FROM (
    SELECT 1 AS month
    UNION ALL
    SELECT 2
    UNION ALL
    SELECT 3
    UNION ALL
    SELECT 4
    UNION ALL
    SELECT 5
    UNION ALL
    SELECT 6
    UNION ALL
    SELECT 7
    UNION ALL
    SELECT 8
    UNION ALL
    SELECT 9
    UNION ALL
    SELECT 10
    UNION ALL
    SELECT 11
    UNION ALL
    SELECT 12
) AS T1
LEFT JOIN (
    SELECT
        MONTH(signUpDate) AS `month`,
        COUNT(*) AS numVisits
    FROM userinfo
    WHERE theActive = 'YES'
    AND idNumber = '0203'
    AND theAccount = 'SUB'
    AND YEAR(signUpDate) = 2010
    GROUP BY MONTH(signUpDate)
) AS T2 ON T1.`month` = T2.`month`
好的,明白了

do until oRecordset.EOF
    theMonth(x) = oRecordset("numVisits")
    oRecordset.movenext
    x = x + 1
loop
好的,明白了

do until oRecordset.EOF
    theMonth(x) = oRecordset("numVisits")
    oRecordset.movenext
    x = x + 1
loop

为什么要将日期存储在文本字段中?@SLaks:他可能将日期存储为日期。MySQL允许对日期列执行类似于
LEFT(signupDate,7)
的字符串操作。我将它们存储为日期时间。2010-01-01 00:00:00格式。为什么要在文本字段中存储日期?@SLaks:他可能正在存储日期。MySQL允许对日期列执行类似于
LEFT(signupDate,7)
的字符串操作。我将它们存储为日期时间。2010-01-01 00:00:00格式在数据库上。啊,正确的标记,它确实有效。我把一封信寄出去了!无论如何,关于我更新的帖子,我将如何将每个numVisit收集到一个数组中?啊,正确的标记,它确实有效。我把一封信寄出去了!无论如何,关于我更新的帖子,我将如何将每个numVisit收集到一个数组中?