Здравствуйте. Есть, например, 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 и т.п. Получается огромное кол-во вариаций, а написать условие под каждый возможный вариант практически нереально. Как можно решить данную задачу?
@dmitry18, данная задача - это плод ошибок допущенных ранее. В частности непродуманная архитектура БД.
А можете подсказать в чем ошибка? У нас есть, например несколько изделий с размерами A, B, C , D, E, т.е. вида "Единица 1 - 50см - 20см -30см -50см - 10см", нам нужно делать выборку вот по этим размерам (по одному или нескольким)
потому как сегодня у вас 5 параметров, завтра 25... каждый раз код переписывать и вообще... заводится отдельная таблица под размеры - связывается с основной, и делайте что хотите, в том числе нужные запросы)
Параметров больше не будет. Но даже если допустить такой вариант, все равно не совсем понятно, как может повлиять на выборку распределение параметров по таблицам. Вот реальный пример: "Позиция 1 - Размер А: 20см, Размер B: 30 см, Размер C: 50см" и "Позиция 2 - Размер А: 20см, Размер B: 30 см, Размер C: 100см" Вот пользователь вводит в поле А значение 20см, мы получаем выборку "Позиция 1" и "Позиция 2", но затем он добавляет еще в поле С значение 100см и эта выборка должна измениться на "Позиция 2", но сложность в том, что мы не знаем, какие поля могут быть заполнены пользователем. Как нам это может помочь, если мы разделим эти размеры по разным таблицами?
Единственная сложность в том, что вы пытаетесь писать код не прочитав при этом ни одной книги по MySQL. Да и книги по РНР под сомнением.
PHP: $input = array_diff ( filter_input_array ( INPUT_POST, [ 'A' => FILTER_DEFAULT, 'B' => FILTER_DEFAULT, 'C' => FILTER_DEFAULT, 'D' => FILTER_DEFAULT, 'E' => FILTER_DEFAULT, ] ), [ null ] ); if ( count ( $input ) != 5 ) { return # Error }
Я новичок в данной тематике и возможно, освоил далеко не весь материал по данной тематике, но ведь для этого и существуют форумы, чтобы получить ответ на вопрос, который не получается решить исходя из своих знаний. А критиковать может любой, только какой в этом смысл? Повысить свою самооценку за счет других? Я не прошу полное решение задачи, я прошу направление вектора для решения данной задачи.
@MouseZver и зачем? Человеку нужен поиск с учётом различного количества параметров и он не знает как собрать такой запрос, он вообще не знает что запросы собираются, но до этого надо разобраться со структурой БД.
как это "сразу" изменится ????????? Пользователь ввел Пользователь нажал отправить Скрипт принял Обработал принял действия которые требует логика кода Ajax? socket ? Но вряд ли юзаешь. --- Добавлено --- Что зачем ? ты книжку зачем советуешь, от которых толку НОЛЬ. Море примеров, документация и прочего хлама в интернете предостаточно, какие сраные книги решают скилл ??? Я ТСа понял так: тоесть фулл либо ничего
Про "сразу" я вроде не упоминал... Все верно, пользователь нажимает кнопку, передаются GET параметры с учетом новых данных (точнее дополненные данные). У меня сложность с пониманием именно формирования SQL запроса в зависимости от полученных параметров.
URL получается вот такой domain.ru/result.php?sizea=10&sizeb=&sizec=&sized=50&sizee= Я так понимаю, что можно сделать проверку, если параметр не пустой, то создаем переменную и в нее вносим sql запрос, а затем собираем полный запрос (конкатенацией) и его выполняем, верно ли я рассуждаю?
Всем спасибо за помощь. Возможно, кому-то из новичков пригодится, вот решение моей задачи https://stackoverflow.com/questions/15794179/create-a-dynamic-mysql-query-using-php-variables
@dmitry18, если было бы всё так просто, не было бы ни Эластик сёрча ни Сфинкса ни даже полнотекстового поиска.
там плохому учат - никакой защиты от SQL инъекций, сделаете так, и в один прекрасный момент начнете удивятся - а где это моя БД ))))