За последние 24 часа нас посетили 20110 программистов и 1083 робота. Сейчас ищут 694 программиста ...

PDO MySQL Не получается объединить два SELECT в один

Тема в разделе "PHP и базы данных", создана пользователем SBAlex, 4 фев 2023.

  1. SBAlex

    SBAlex Новичок

    С нами с:
    20 апр 2022
    Сообщения:
    26
    Симпатии:
    1
    Всем привет, Мне нужно выполнить два SELECT к одной и той же таблице и получить количество уникальных посещений в hosts и количество неуникальных посещений в visits .

    Делаю так:

    PHP:
    1. $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, 1);
    2.  
    3. $sql="
    4. SELECT DATE_FORMAT(date, '%Y-%m-%d') as d, COUNT(id) as visits FROM clients_log WHERE user_id=$webmaster_id AND date BETWEEN '$date1' AND '$date2' AND site_id = 0 GROUP BY d;
    5. SELECT DATE_FORMAT(date, '%Y-%m-%d') as d, COUNT(DISTINCT(ip)) as hosts FROM clients_log WHERE user_id=$webmaster_id AND date BETWEEN '$date1' AND '$date2' AND site_id = 0 GROUP BY d;
    6. ";
    7.  
    8. $stmt = $pdo->prepare($sql);
    9. $stmt->execute();
    10.  
    11. $result = $stmt->fetchAll();
    12. if ($result)
    13.     {
    14.     echo '<pre>';
    15.     print_r($result);
    16.     echo '</pre>';
    17.     }
    Но почему то в массиве вижу только visits по выбранным датам. hosts отсутствует. Мне не хочется делить это на два запроса, хочется в одном запросе получить результат.
     
  2. SBAlex

    SBAlex Новичок

    С нами с:
    20 апр 2022
    Сообщения:
    26
    Симпатии:
    1
    Поправка. У второго запроса во WHERE site_id = 1
     
  3. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.789
    Симпатии:
    646
    см. UNION.
     
    don.bidon нравится это.
  4. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    848
    Симпатии:
    131
    Много запросов через PHP не исполняется, по одному норм, и, как @miketomlin написал, смотри в сторону объединений.
     
  5. SBAlex

    SBAlex Новичок

    С нами с:
    20 апр 2022
    Сообщения:
    26
    Симпатии:
    1
    Спасибо, но мне бы рабочий пример моего запроса, на основе UNION.

    Вот это у меня не сработало(

    Код (Text):
    1.  
    2. SELECT DATE_FORMAT(date, '%Y-%m-%d') as d, COUNT(id) as visits, COUNT(DISTINCT(ip)) as hosts FROM clients_log WHERE user_id=1046 AND date BETWEEN '2023-01-29 00:00:00' AND '2023-02-04 23:59:59' AND site_id = 0 GROUP BY d  
    3.  
    4. UNION  
    5.  
    6. SELECT DATE_FORMAT(date, '%Y-%m-%d') as d, COUNT(DISTINCT(ip)) as test_page FROM clients_log WHERE user_id=1046 AND date BETWEEN '2023-01-29 00:00:00' AND '2023-02-04 23:59:59' AND site_id = 1 GROUP BY d
     
  6. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    848
    Симпатии:
    131
    У кого, кроме тебя это должно сработать/не сработать? Даже структуру таблиц не кинул, а телепаты все в отпуске, йопта.
    + читай сообщения, что БД выдаёт, поискуй.
     
  7. Aleksandr.B

    Aleksandr.B Новичок

    С нами с:
    2 фев 2023
    Сообщения:
    151
    Симпатии:
    39
    Адрес:
    Барнаул
    Для union сигнатура ответа по каждому запросу должна быть одинаковой. Т. е. если в первом запросе есть "as visits" Во втором должно быть также. Для второго запроса аналогично.
     
    miketomlin нравится это.