У меня есть база данных, как это:поиска несколько полей MySQL
ID | Name | Model | Type
1 | Car | 4 | C
2 | Bar | 2 | B
3 | Car | 4 | D
4 | Car | 3 | D
и форму, как это:
Name :
Model :
Type :
Теперь я хотел бы искать только имя, например «автомобиль» и он возвращает линии 1, 3, 4. (я оставил модель и тип пустым)
Если я ищу «Автомобиль» в названии и 4 в Модели, он возвращает строки 1, 3. (Я оставил тип пустым)
И если я ищу «Автомобиль» в названии и «D» в «Тип», он возвращает строку 3, 4 (я оставил модель пустым)
Возможно ли это сделать в одном запросе?
Это то, что я имел:
SELECT *
FROM items
WHERE (:name IS NOT NULL AND name = :name)
AND (:model IS NOT NULL AND model = :model)
AND (:type IS NOT NULL AND type = :type)
Но это не работает. Я хотел бы заполнить только 2 на 3 поля, а «WHERE» адаптируется и игнорирует пустое поле.
EDIT 1: Немного трудно объяснить, но у меня есть форма. Я хочу иметь только одно обязательное поле, два других являются необязательными, но если я также заполняю одно или два других поля, они действуют как фильтр.
Поэтому поле имени требуется (в форме). Если я заполню только поле имени, он будет выбирать только имя name =: name. Если я наберу имя + модель, он выберет, где name =: name AND model =: model. и т. Д.
Благодарим за помощь.
Используйте 'OR' не' AND' для дополнительных параметров. '(: name IS NOT NULL AND name =: name) OR (: model NOT NOT, NULL AND model =: model)' – chris85
Вы также можете сделать переменную 'where' и добавить только значения, которые вам нужны, с помощью условных выражений и в условности связывают. – chris85
@ chris85 Спасибо Крис. Проблема с OR заключается в том, что если я буду искать Car in Name и 4 в Model, появится даже строка 4 (Car-3) ... – cyclone200