За последние 24 часа нас посетили 22102 программиста и 1151 робот. Сейчас ищут 387 программистов ...

Выборка из БД по значениям input

Тема в разделе "PHP для новичков", создана пользователем dmitry18, 19 дек 2019.

Метки:
  1. dmitry18

    dmitry18 Новичок

    С нами с:
    19 дек 2019
    Сообщения:
    7
    Симпатии:
    0
    Здравствуйте. Есть, например, 5 input полей в форме, в которые пользователь вводит данные и по которым потом загружаются данные из БД.

    Пример запроса: SELECT * FROM `main` WHERE `inputA` > `tableA` AND `inputB` > `tableB` AND `inputC` > `tableC` ...

    Например, поля формы A, B, C, D, E. Структура БД - такая же: столбцы A, B, C, D, E. Как можно сделать, чтобы данные подтягивались из БД, но только для введенных значений в input. Основная сложность в том, что поля могут заполняться непоследовательно, т.е. пользователь может ввести значения только в A и С или A, B, E и т.п. Получается огромное кол-во вариаций, а написать условие под каждый возможный вариант практически нереально. Как можно решить данную задачу?
     
  2. Valick

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

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @dmitry18, данная задача - это плод ошибок допущенных ранее. В частности непродуманная архитектура БД.
     
  3. dmitry18

    dmitry18 Новичок

    С нами с:
    19 дек 2019
    Сообщения:
    7
    Симпатии:
    0
    А можете подсказать в чем ошибка? У нас есть, например несколько изделий с размерами A, B, C , D, E, т.е. вида "Единица 1 - 50см - 20см -30см -50см - 10см", нам нужно делать выборку вот по этим размерам (по одному или нескольким)
     
  4. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.823
    Симпатии:
    736
    Адрес:
    Татарстан
    потому как сегодня у вас 5 параметров, завтра 25... каждый раз код переписывать и вообще...
    заводится отдельная таблица под размеры - связывается с основной, и делайте что хотите, в том числе нужные запросы)
     
  5. dmitry18

    dmitry18 Новичок

    С нами с:
    19 дек 2019
    Сообщения:
    7
    Симпатии:
    0
    Параметров больше не будет. Но даже если допустить такой вариант, все равно не совсем понятно, как может повлиять на выборку распределение параметров по таблицам.

    Вот реальный пример: "Позиция 1 - Размер А: 20см, Размер B: 30 см, Размер C: 50см" и "Позиция 2 - Размер А: 20см, Размер B: 30 см, Размер C: 100см"

    Вот пользователь вводит в поле А значение 20см, мы получаем выборку "Позиция 1" и "Позиция 2", но затем он добавляет еще в поле С значение 100см и эта выборка должна измениться на "Позиция 2", но сложность в том, что мы не знаем, какие поля могут быть заполнены пользователем. Как нам это может помочь, если мы разделим эти размеры по разным таблицами?
     
  6. Valick

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

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    Единственная сложность в том, что вы пытаетесь писать код не прочитав при этом ни одной книги по MySQL. Да и книги по РНР под сомнением.
     
  7. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.750
    Симпатии:
    1.322
    Адрес:
    Лень
    PHP:
    1. $input = array_diff ( filter_input_array ( INPUT_POST, [
    2.     'A' => FILTER_DEFAULT,
    3.     'B' => FILTER_DEFAULT,
    4.     'C' => FILTER_DEFAULT,
    5.     'D' => FILTER_DEFAULT,
    6.     'E' => FILTER_DEFAULT,
    7. ] ), [ null ] );
    8.  
    9. if ( count ( $input ) != 5 )
    10. {
    11.     return # Error
    12. }
     
  8. dmitry18

    dmitry18 Новичок

    С нами с:
    19 дек 2019
    Сообщения:
    7
    Симпатии:
    0
    Я новичок в данной тематике и возможно, освоил далеко не весь материал по данной тематике, но ведь для этого и существуют форумы, чтобы получить ответ на вопрос, который не получается решить исходя из своих знаний. А критиковать может любой, только какой в этом смысл? Повысить свою самооценку за счет других? Я не прошу полное решение задачи, я прошу направление вектора для решения данной задачи.
     
  9. Valick

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

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @MouseZver и зачем? Человеку нужен поиск с учётом различного количества параметров и он не знает как собрать такой запрос, он вообще не знает что запросы собираются, но до этого надо разобраться со структурой БД.
     
  10. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.750
    Симпатии:
    1.322
    Адрес:
    Лень
    как это "сразу" изменится ?????????

    Пользователь ввел
    Пользователь нажал отправить
    Скрипт принял
    Обработал
    принял действия которые требует логика кода


    Ajax? socket ? Но вряд ли юзаешь.
    --- Добавлено ---
    Что зачем ? ты книжку зачем советуешь, от которых толку НОЛЬ. Море примеров, документация и прочего хлама в интернете предостаточно, какие сраные книги решают скилл ???

    Я ТСа понял так:
    тоесть фулл либо ничего
     
  11. dmitry18

    dmitry18 Новичок

    С нами с:
    19 дек 2019
    Сообщения:
    7
    Симпатии:
    0
    Про "сразу" я вроде не упоминал... Все верно, пользователь нажимает кнопку, передаются GET параметры с учетом новых данных (точнее дополненные данные). У меня сложность с пониманием именно формирования SQL запроса в зависимости от полученных параметров.
     
  12. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.750
    Симпатии:
    1.322
    Адрес:
    Лень
    покажи урл GET запроса с параметрами A,D
     
  13. dmitry18

    dmitry18 Новичок

    С нами с:
    19 дек 2019
    Сообщения:
    7
    Симпатии:
    0
    URL получается вот такой domain.ru/result.php?sizea=10&sizeb=&sizec=&sized=50&sizee=

    Я так понимаю, что можно сделать проверку, если параметр не пустой, то создаем переменную и в нее вносим sql запрос, а затем собираем полный запрос (конкатенацией) и его выполняем, верно ли я рассуждаю?
     
  14. Valick

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

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    верно, только не SQL запрос, а часть SQL запроса
     
  15. dmitry18

    dmitry18 Новичок

    С нами с:
    19 дек 2019
    Сообщения:
    7
    Симпатии:
    0
  16. Valick

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

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @dmitry18, если было бы всё так просто, не было бы ни Эластик сёрча ни Сфинкса ни даже полнотекстового поиска.
     
  17. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.823
    Симпатии:
    736
    Адрес:
    Татарстан
    там плохому учат - никакой защиты от SQL инъекций, сделаете так, и в один прекрасный момент начнете удивятся - а где это моя БД ))))
     
  18. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.750
    Симпатии:
    1.322
    Адрес:
    Лень