За последние 24 часа нас посетили 22934 программиста и 1268 роботов. Сейчас ищут 740 программистов ...

select из массива с формированием массива

Тема в разделе "MySQL", создана пользователем shiyri, 4 окт 2020.

  1. shiyri

    shiyri Активный пользователь

    С нами с:
    8 июн 2019
    Сообщения:
    111
    Симпатии:
    0
    Добрый день, подскажите куда копать
    запрос:
    Код (Text):
    1. SELECT menu_table.date, menu_table.m_array, kuchnya.id, kuchnya.names
    2. FROM menu_table LEFT JOIN kuchnya ON kuchnya.id IN (menu_table.m_array)
    выдает результат по первому значению массива m_array, остальные не перебирает, если поставить значения после IN то все перебирает.
    1. Как после IN поставить значения вместо переменной?
    2. Как потом их же собрать в массив?
    что б по итогу получить вид запроса типа:
    |.....дата....|......массив......|
    |.....дата+1....|......массив2......|
    |.....дата+3....|......массив3......|
    .......
    пока что получается типа:
    |.....дата....|......значение массива1......|
    |.....дата....|......значение массива2......|
    .........
     
  2. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
  3. shiyri

    shiyri Активный пользователь

    С нами с:
    8 июн 2019
    Сообщения:
    111
    Симпатии:
    0
    дак а как разделить массив, что б не только первое значение обрабатывалось?
     
  4. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Преобразовать запрос в таблицу и объединить с предыдущими.
     
  5. shiyri

    shiyri Активный пользователь

    С нами с:
    8 июн 2019
    Сообщения:
    111
    Симпатии:
    0
    А как через STRING_SPLIT сделать?
     
  6. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    В mysql встроенных функций типа explode() в php нет.
    Теоретически вашу задачу(если я правильно понял "STRING_SPLIT") можно решить создав встроенную процедуру или использовав оperator LOAD DATA.
    Но мороки много. Проще использовать php.
     
  7. shiyri

    shiyri Активный пользователь

    С нами с:
    8 июн 2019
    Сообщения:
    111
    Симпатии:
    0
    эммм на самом деле задача состоит:
    Есть генерируемая таблица из mysql напротив каждой строки есть чекбокс, нужно собрать все включеные чекбоксы и сохранить в базу данных, потом их считать, и сгенерировать таблицу уже из первоначальной в соответствии с отмеченными чекбоксами.
    Это как то проще можно сделать?
     
  8. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Да. Не надо их "сохранять в базу", а использовать в условии выборки.
     
  9. shiyri

    shiyri Активный пользователь

    С нами с:
    8 июн 2019
    Сообщения:
    111
    Симпатии:
    0
    не совсем понимаю о чем вы.
    допустим выбраны 15 строк из 100, у каждой строки есть ид элемента, я и сохраняю перечисление эти выбранных ид в массие бд
     
  10. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Зачем? Они потом еще где-то будут использованы?
     
  11. shiyri

    shiyri Активный пользователь

    С нами с:
    8 июн 2019
    Сообщения:
    111
    Симпатии:
    0
    дело происходит так, я перечисляю блюда для шеф-повара из mysql, он ставил галки какие сегодня-завтра через неделю будут в меню чек боксами, когда приходит дата для меню, только те блюда выходят на сайте. И нужно что б шеф-повар мог это мнею редактировать если будет затык с доставкой каких то продуктов, исключая или добовляя в меню новые блюда так же чекбоксами.
     
  12. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Хорошо. Как и куда вы сохраняете эти самые блюда?
     
  13. shiyri

    shiyri Активный пользователь

    С нами с:
    8 июн 2019
    Сообщения:
    111
    Симпатии:
    0
    в mysql,
    таблица с блюдами: id type names sostav ves price opisanie imageData imageTyp
    таблица с меню
    : id date menu
    В таблице меню в поле меню планирую хранить ид блюд через запятую, надо только придумать как строку разбирать.
     
  14. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Начнем с того, что для такой задачи я бы рекомендовал выгружать пользователю отдельную таблицу в CSV, с выборкой на каждую дату отдельно. В офисных программах отлично редактируются. А потом уже их синхронизировать с основной базой.
    Теперь по поводу
    .
    Не самая лучшая затея.
    Отдельная таблица с колонками id, date
    И не надо ничего разбирать.
     
  15. shiyri

    shiyri Активный пользователь

    С нами с:
    8 июн 2019
    Сообщения:
    111
    Симпатии:
    0
    я уже думал об этом, считал mysql может всё......
     
  16. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    В принципе, так и есть.
    Но некоторые вещи проще сделать скриптом.
     
  17. shiyri

    shiyri Активный пользователь

    С нами с:
    8 июн 2019
    Сообщения:
    111
    Симпатии:
    0
    подскажите пожалста как сделать новую строку в mysql для каждого checkbox из генерируемой таблицы, понимаю что надо через while как-то, но понять не могу как разбить чекбоксы.
    --- Добавлено ---
    Код (Text):
    1.     require_once "db.php";
    2. if (isset($_POST['submit'])){
    3.      $menu = ($_POST['menu']);
    4.      $date = ($_POST['date']);
    5.      $menu_string = implode(",", $menu);
    6.      $sql = "INSERT INTO menu_table (date, m_array) VALUES('{$date}', '{$menu_string}')";
    7.      mysqli_query($conn,"SET CHARACTER SET 'utf8'");
    8.     date_default_timezone_set('Asia/Yekaterinburg');
    9.     $result = mysqli_query($conn, $sql);
    10.     }
    --- Добавлено ---
    Код (Text):
    1. <?php
    2.     require_once "db.php";
    3. if (isset($_POST['submit'])){
    4.      $menu = ($_POST['menu']);
    5.      $date = ($_POST['date']);
    6.      for ($i=0; $i<sizeof ($menu);$i++) {
    7. $sql = "INSERT INTO menu_table (date, m_array) VALUES('{$date}', '".$menu[$i]. "')";
    8. mysqli_query($conn,"SET CHARACTER SET 'utf8'");
    9.     date_default_timezone_set('Asia/Yekaterinburg');
    10.     $result = mysqli_query($conn, $sql);
    11. }
    12. echo "Меню добавлено!";  
    13. }
    чот туплю жестко
     
  18. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Давайте форму, и структуру таблицы.
     
  19. shiyri

    shiyri Активный пользователь

    С нами с:
    8 июн 2019
    Сообщения:
    111
    Симпатии:
    0
    спасибо все получилось, но тут след затык,
    пишу, дата в формате юникод типа 2020-01-04.
    Код (Text):
    1. SELECT * FROM `menu_table` GROUP by date
    запрос выводит самую первую строку без группировки
    --- Добавлено ---
    запрос
    Код (Text):
    1. SELECT * FROM `menu_table` GROUP by date = 2020-10-22
    выводит так же одну строку с другой датой вообще без группировки
    --- Добавлено ---
    id date m_array
    8 2020-10-30 83
    3 2020-10-22 83
    4 2020-10-22 79
    5 2020-10-22 78
    6 2020-10-22 77
    7 2020-10-22 76
    9 2020-10-30 82
    10 2020-10-30 80
     
  20. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Так работать не будет.
    Что вы конкретно хотите сделать?
    Сгруппировать всю таблицу по датам?
    Или выбрать список на определенную дату? Или их диапазон?
     
  21. shiyri

    shiyri Активный пользователь

    С нами с:
    8 июн 2019
    Сообщения:
    111
    Симпатии:
    0
    объеденить по датам ид блюд в столбце m_array, подтянуть из другой таблицы, описание фото, цену и тп
    --- Добавлено ---
    чтоб вывести на главной странице меню на сегодняшний день, либо отредактировать будущие меню
     
  22. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Не совсем понимаю зачем нужна колонка m_array?
    Без обеих таблиц вряд ли смогу помочь.
     
  23. shiyri

    shiyri Активный пользователь

    С нами с:
    8 июн 2019
    Сообщения:
    111
    Симпатии:
    0
    вторая таблица с блюдами
    id--type--names--sostav--ves--price--opisanie--imageData--imageType
    77--Салаты--Крабовый--Огурец, кукуруза, палочки крабовые, яйцо, майонез.--100 --42--Какое застолье без крабиков! -- [BLOB - 282.8 КиБ]--image/jpeg
    78--Салаты--Винегрет--Картофель, капуста с/с, морковь, горошек, лук.--100 --35 --Нестареющая класика. --[BLOB - 265.1 КиБ] --image/jpeg
    Колонка m_array нужна для формирования динамического меню на сайте, типа столовка готовит каждый день не одно и тоже выбирая из общего списка блюд
     
  24. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Удалите это сообщение.
    В PMA меню таблиц нажмите экспорт>sql
    Полученные файлы .sql упакуйте и где-нибудь выложите.
    Или воспользуйтесь внутренней почтой сайта.
     
  25. shiyri

    shiyri Активный пользователь

    С нами с:
    8 июн 2019
    Сообщения:
    111
    Симпатии:
    0
    https://yadi.sk/d/V0Qo5MM9iDi8gw
    вот sql файл
    удалить немогу, права на удаление/редактирование временные.....