2010-10-03 102 views
0

IM学习的MySQL命令,并结合多个查询的方法,所以为了获得这个目标,现在我需要把这些查询组合:结合多个MySQL查询到一个

list($TotalVisitsToday) = $db->sql_fetchrow($db->sql_query("SELECT COUNT(DISTINCT ip_address) FROM table_iptracking WHERE `date_time` between '$yesterday' and '$today' ")); 
    list($TotalVisitsYesterday) = $db->sql_fetchrow($db->sql_query("SELECT COUNT(DISTINCT ip_address) FROM table_iptracking WHERE `date_time` between '$yesterday_1' and '$yesterday' ")); 

    list($TotalPVisitsToday) = $db->sql_fetchrow($db->sql_query("SELECT count(ipid) FROM table_iptracking WHERE `date_time` between '$yesterday' and '$today'")); 
    list($TotalPVisitsYesterday) = $db->sql_fetchrow($db->sql_query("SELECT count(ipid) FROM table_iptracking WHERE `date_time` between '$yesterday_1' and '$yesterday'")); 

    list($TotalCrawlers) = $db->sql_fetchrow($db->sql_query("SELECT count(ipid) FROM table_iptracking WHERE hostname LIKE '%crawl%' ")); 

我对如何不知道混合上面的行!

回答

0

你可能形成的SQL语句组成工会,像...

SELECT COUNT(DISTINCT ip_address) 
    FROM table_iptracking 
    WHERE `date_time` between '$yesterday' and '$today' 
UNION 
SELECT COUNT(DISTINCT ip_address) 
    FROM table_iptracking 
    WHERE `date_time` between '$yesterday_1' and '$yesterday' 
UNION 
SELECT count(ipid) 
    FROM table_iptracking 
    WHERE `date_time` between '$yesterday' and '$today' 
UNION 
SELECT count(ipid) 
    FROM table_iptracking 
    WHERE `date_time` between '$yesterday_1' and '$yesterday' 
UNION 
SELECT count(ipid) 
    FROM table_iptracking 
    WHERE hostname LIKE '%crawl%' 

我不能说我会建议这一点,虽然。结果集不同行意味着不同的东西,从长远来看可能会证明麻烦。

+0

我试过联盟之前,你建议这个答案,但结果是零和不起作用 – 2010-10-05 18:19:56

0

我不知道你的最终目标,但如果你只是想在一个查询,你可以做这样的:

SELECT 
(SELECT COUNT(DISTINCT ip_address) FROM table_iptracking WHERE 'date_time' between '$yesterday' and '$today') COUNT1, 
(SELECT COUNT(DISTINCT ip_address) FROM table_iptracking WHERE 'date_time' between '$yesterday_1' and  '$yesterday') COUNT2, 
(SELECT COUNT(ipid) FROM table_iptracking WHERE 'date_time' between '$yesterday' and '$today') COUNT3, 
(SELECT COUNT(ipid) FROM table_iptracking WHERE 'date_time' between '$yesterday_1' and '$yesterday') COUNT4, 
(SELECT COUNT(ipid) FROM table_iptracking WHERE hostname LIKE '%crawl%') COUNT5 

(你可以在MySQL省略FROM caluse)

+0

你的答案很酷,我试过了,但它没有工作,你确定的语法吗? – 2010-10-05 18:19:18

+0

是的,语法是正确的,你会得到什么错误? – 2010-10-06 02:08:13

+0

另外,它是MySQL还是PHP相关?你确定变量占位符被你的PHP脚本中的值正确替换吗?不幸的是,由于我是一名ASP.NET开发人员,因此我无法帮助您,但语法对MySQL确实有效(实际上很简单)。尝试从MySQL客户端(如MySQL命令行)运行查询以确保其正常工作。 – 2010-10-06 02:24:25