За последние 24 часа нас посетили 18825 программистов и 1594 робота. Сейчас ищут 1153 программиста ...

Запросы к mysql выполняются по-разному...

Тема в разделе "PHP для новичков", создана пользователем ddrb, 14 фев 2024.

Метки:
  1. ddrb

    ddrb Новичок

    С нами с:
    14 фев 2024
    Сообщения:
    2
    Симпатии:
    0
    Добрый день! Непонятно ведет себя один и тот же запрос Mysql.

    1) Если я его выполняю через утилиту mysql: mysql> SELECT * from power_pump1_arc where (Time between '2024-02-14 08:08:00' and '2024-02-14 08:18:00') or (Time=(SELECT MAX(Time) from power_pump1_arc where Time<'2024-02-14 08:08:00'));
    то он выдает результат:
    +--------+---------------------+
    | Status | Time |
    +--------+---------------------+
    | 0 | 2024-02-14 08:07:09 |
    | 1 | 2024-02-14 08:10:23 |
    | 0 | 2024-02-14 08:15:36 |
    +--------+---------------------+
    3 rows in set (0.00 sec)

    2) Если же я использую php:
    $query = "SELECT * from power_pump1_arc where (Time between '$datetimebegin' and '$datetimeend') or (Time=(SELECT MAX(Time) from power_pump1_arc where Time<'$datetimebegin'))";
    $file = 'log.txt';
    file_put_contents($file, $query."\n", FILE_APPEND | LOCK_EX);
    $result = mysqli_query($dbCon, $query);
    $cust = mysqli_fetch_array($result);
    $Graphs = array();
    $i=0;
    while($r = mysqli_fetch_assoc($result))
    {
    $Graphs[] = $r;
    file_put_contents($file, $r["Time"]." ".$r["Status"]."\n", FILE_APPEND | LOCK_EX);
    $i++;
    }
    то в файл 'log.txt' записывается другой результат, на одну запись меньше.
    SELECT * from power_pump1_arc where (Time between '2024-02-14 08:08:00' and '2024-02-14 08:18:00') or (Time=(SELECT MAX(Time) from power_pump1_arc where Time<'2024-02-14 08:08:00'))
    2024-02-14 08:10:23 1
    2024-02-14 08:15:36 0

    Вложенный подзапрос не отрабатывает.

    В чем причина такого разного поведения?
     
  2. ddrb

    ddrb Новичок

    С нами с:
    14 фев 2024
    Сообщения:
    2
    Симпатии:
    0
    Путем сокращения запроса понял, что функция "MAX" не работает в PHP, но работает в утилите mysql.exe... Почему?
     
  3. don.bidon

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

    С нами с:
    28 мар 2021
    Сообщения:
    914
    Симпатии:
    143
    Не может такого быть, ошибка в коде, расковыривать нет времени.
     
  4. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    425
    Симпатии:
    79
    Адрес:
    Бавария, Германия
    Добрый день!
    Ошибка в коде
    PHP:
    1. $cust = mysqli_fetch_array($result); // нужно удалить
    Здесь выбирается первая запись, которая не попадает в log.txt
    Удачи!