объединение нескольких запросов MySQL в один

0

im изучая команды 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%' "));

Я не знаю, как смешать вышеуказанные строки!

Теги:

2 ответа

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

(вы можете опустить функцию FROM caluse в MySQL)

  • 0
    Ваш ответ был классным, и я попробовал его, но он не работает, вы уверены в синтаксисе?
  • 0
    Да, синтаксис правильный, какую ошибку вы получаете?
Показать ещё 1 комментарий
0

Вы можете сформировать инструкцию SQL в UNION, что-то вроде...

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
    Я попробовал UNION, прежде чем вы предложили этот ответ, но результат равен нулю и не работает

Ещё вопросы

Сообщество Overcoder
Наверх
Меню