За последние 24 часа нас посетили 17567 программистов и 1728 роботов. Сейчас ищут 1509 программистов ...

получить массив данных из таблицы

Тема в разделе "MySQL", создана пользователем aliensgroup, 3 мар 2023.

Метки:
  1. aliensgroup

    aliensgroup Новичок

    С нами с:
    28 май 2022
    Сообщения:
    33
    Симпатии:
    0
    Добрых времен суток, пишу свой модуль, и удачно работает , но! решил связаться с базой , и используя строгий канон MVC движка...
    собственно таблица oc_color:
    Код (Text):
    1. +-----+-------+---------+---------------+
    2. |  id ~ | color |  price   |  data_mod    |
    3. +-----+-------+---------+---------------+
    4. |  24  | red    |  20.048 |  03.03. 2022|
    5. |  25  | gre    |  17.045 |  03.03. 2022|
    6. |  26  | yel    | 13.054 |  03.03. 2022|
    7.                   .................
    8. | 105 | red    |  20.038 |  25.02. 2023|
    9. | 106 | gre    |  19.045 |  25.02. 2023|
    10. | 107 | yel    |  15.068 |  25.02. 2023|
    11. | 108 | red    |  20.068 |  26.02. 2023|
    12. | 109 | gre    |  18.045 |  26.02. 2023|
    13. | 110 | yel    |  14.058 |  26.02. 2023|
    14.                   .................
    15. | 118 | red    |  20.068 |  03.03. 2023|
    16. | 119 | gre    |  18.045 |  03.03. 2023|
    17. | 120 | yel     |  14.058 |  03.03. 2023|
    и в разделе Model я создаю файл model/color.php
    PHP:
    1. class ModelExtensionDashboardChartColor extends Model {
    2.  
    3.     public function getTotal_per_red_ByMonth() {
    4.     $data = array();
    5.  
    6.     for ($i = -5; $i < 1; $i++) {
    7.       $date = date('d.m.Y' ,strtotime ("$i days"));
    8.              
    9.     $data = $this->db->query("SELECT price FROM oc_color  WHERE code='red' AND data_mod='". $date ."' ");
    10.     }
    11.  
    12.     return $data;
    13.   }
    по логике sql я должен был получить за определенный период (5 дней) значения колонки price как массив, но!
    в контролере controler/color.php делая запрос к модели
    PHP:
    1. $data[] = $this->model_extension_dashboard_сhart_сolor->getTotal_per_red_ByMonth();
    2.   //на всякий, смотрим что прибежало      
    3. var_dump ($data) ;
    и какой-то не внятный ответ, прошу прощения принт скрином , почему-то не могу прикрепить ?
     

    Вложения:

    #1 aliensgroup, 3 мар 2023
    Последнее редактирование: 3 мар 2023
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.108
    Симпатии:
    1.243
    Адрес:
    там-сям
    слово json в ошибке? ищи где ты работаешь с json. внезапно™ сам.

    а делаешь цикл на 6.

    скажи что ты не хранишь дату в текстовом поле, пожалуйста! ну нет ведь?... :(
    дата в sql представляется как YYYY-MM-DD
    когда начнешь использовать правильные типы данных, сможешь делать запросы с >, < и BETWEEN которые работают!
    а также сможешь пользоваться специальными функциями mysql для работы с датой-временем.
    https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html
    --- Добавлено ---
    P.S. копируй текст ошибки как текст. это неуважение когда заставляешь людей куда-то кликать и что-то набивать руками, когда они могли бы скопировать-вставить
     
  3. aliensgroup

    aliensgroup Новичок

    С нами с:
    28 май 2022
    Сообщения:
    33
    Симпатии:
    0
    это в контролере он передает ажаксом в twig в javascript массив для графика


    ваша правда после заметил, и исправил


    я в курсе формата у меня и запись есть в спец файле php для cron
    PHP:
    1. date_default_timezone_set("Europe/Chisinau");
    2. $dat = date("Y-m-d H:i:s", time()); //формат времени MySQL
    3. $date = date('d.m.Y');// но этот формат мне удобен был когда я не работал с базой а на прямую 1095 запросов кидал на удаленный сервер
    ну дату откоректировать и секунды не вопрос: экспорт базы -> блокнот -> regexp -> импорт в зад
    --- Добавлено ---
    Да я бы с удоволиствием но движок передает в модальном окне все ошибки через alarm после json передачи из контролера , у меня инструменты разработчика даже не доступны из-за модального окна с кнопкой ОК. я же прям в браузере пилю и в нотепаде )))
     
  4. aliensgroup

    aliensgroup Новичок

    С нами с:
    28 май 2022
    Сообщения:
    33
    Симпатии:
    0
    ну и читО, ну перевел я колонку data_mod к правильному типу date
    Код (Text):
    1. +-------+----------+----------+-------------+
    2. |  id ~ | color |  price   |  data_mod    |
    3. +-----+--------+----------+--------------------+
    4. |  24  | red    |  20.048 |  2022-03-03    |
    5. |  25  | gre    | 17.045  |  2022-03-03    |
    6. |  26  | yel     | 13.054  |  2022-03-03   |
    7.                   .................
    8. | 105 | red    |  20.038 |   2023-02-25   |
    9. | 106 | gre    |  19.045 |   2023-02-25   |
    10. | 107 | yel    |  15.068 |    2023-02-25   |
    11. | 108 | red    |  20.068 |   2023-02-26   |
    12. | 109 | gre    |  18.045 |   2023-02-26   |
    13. | 110 | yel    |  14.058 |    2023-02-26   |
    14.                   .................
    15. | 118 | red    |  20.068 |   2023-03-03   |
    16. | 119 | gre    |  18.045 |   2023-03-03   |
    17. | 120 | yel    | 14.058  |   2023-03-03   |
    и мой запрос через модуль
    PHP:
    1.     public function getTotal_per_red_ByMonth() {
    2.         date_default_timezone_set("Europe/Chisinau");
    3.  
    4. $date = date('Y-m-d');
    5. $date_per = date('Y-m-d' ,strtotime ("-30 days"));
    6.  
    7.      
    8.        $query =$this->db->query("SELECT price FROM oc_color WHERE data_mod BETWEEN '" . $date . "' AND '" . $date_per . "'
    9.        AND color NOT IN ('gre','yel') order by id ");
    10.            
    11.         return $query ;
    12.     }
    и делаю запрос в контролере
    PHP:
    1. $json['results'][] = $this->model_extension_dashboard_chart_color->getTotal_per_red_ByMonth();
    2.  
    3.    
    4. print_r($json['results']);
    и пустые Array вывод :
    Array
    (
    [0] => stdClass Object
    (
    [num_rows] => 0
    [row] => Array
    (
    )
    [rows] => Array
    (
    )
    )
    )
     
  5. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.108
    Симпатии:
    1.243
    Адрес:
    там-сям
    Запрос выглядит правдоподобно. Надо отлаживать код, проверять как в точности этот запрос сработает в phpmyadmin или что ты используешь для доступа к БД...
    --- Добавлено ---
    Я сделал замечания к косякам которые вижу, но заниматься мелкой отладкой не хочу, извиняй :)
     
    aliensgroup нравится это.
  6. Aleksandr.B

    Aleksandr.B Новичок

    С нами с:
    2 фев 2023
    Сообщения:
    159
    Симпатии:
    41
    Адрес:
    Барнаул
    Нужно поменять местами $date и $date_per
    PHP:
    1. public function getTotal_per_red_ByMonth() {
    2.         date_default_timezone_set("Europe/Chisinau");
    3. $date = date('Y-m-d');
    4. $date_per = date('Y-m-d' ,strtotime ("-30 days"));
    5.  
    6.        $query =$this->db->query("SELECT price FROM oc_color WHERE data_mod BETWEEN '" . $date_per . "' AND '" . $date . "'
    7.       AND color NOT IN ('gre','yel') order by id ");
    8.        
    9.         return $query ;
    10.     }
     
    aliensgroup нравится это.
  7. aliensgroup

    aliensgroup Новичок

    С нами с:
    28 май 2022
    Сообщения:
    33
    Симпатии:
    0
    благодарю за точный совет, есть мой косяк данные начали приходить, но почему-то не за три последних дня , а ровно за последние 3 дня и месяц))) моя не внимательность, все встало на места после уточнения в запросе
    PHP:
    1. // ... order by data_mod ");
    Вы сделали больше, вы правильно направили меня!