Как обрабатывать возможные множественные / несуществующие параметры поиска с помощью MySQL / PDO

#php #mysql #pdo

#php #mysql #pdo

Вопрос:

Допустим, у меня есть эти таблицы в MySQL

 table actors
id  int  11  primary key auto_increment
name  varchar  30
sex   varchar  10

table movies
id  int  11  primary key auto_increment
name  varchar  30
type  varchar  30

table actors_movies
actor_id  int  11
movie_id  int  11
  

И предположим, что у меня есть форма в HTML, которая позволяет пользователям искать участников по параметрам, которые они определяют.

Например, пользователь может искать только актеров с именем «Джон», или они могут искать актеров мужского пола, которые снимались в фильме типа «Драма», или они могут искать актеров в фильме с именем «Бэтмен», которые являются женщинами, или они могут искать актеров, которые снимаются в фильме «Драма» И / или (они выбирают, в каком) фильме «Триллер».

Мое решение — это очень неуклюжий PHP-скрипт, который по частям создает подготовленную инструкцию для запроса базы данных с помощью этого в зависимости от того, какие параметры ему заданы.

Мое решение работает, но является ли это единственно возможным способом? Я нахожу свое решение действительно неуклюжим, и по мере добавления большего количества возможных параметров оно становится только хуже.

потому что меня попросили привести пример того, что я делаю

вот некоторый псевдокод для того, что в основном делает мой скрипт

 query = "Select * from actors 
         left join actors_movies on actors.id = actors_movies.actor_id
         left join movies on movies.id = actors_movies.movie_id"

Then for each possible parameter it does something like this

if(actors.sex given)
   query append("where actors.sex ="
   for each sex given
      query append sex and either AND/OR
  

надеюсь, это имеет смысл

Комментарии:

1. Вы получите лучшие предложения, если покажете свою текущую реализацию, вы знаете…

2. @Ekin ok я добавил это, хотя не уверен, что это имеет смысл

3. Вы спрашиваете о том, что обычно называют построителем запросов. Вы ищете рекомендации по созданию запросов третьими сторонами или вы хотите / должны создать свои собственные?

4. @Khyron если у вас есть какие-то предложения, пожалуйста, дайте мне знать! если бы вы могли назвать мне имена некоторых сторонних разработчиков, тогда это было бы здорово, или если создание моего собственного не слишком сложно, тогда это тоже хорошо.

5. Честно говоря, это больше зависит от ваших требований и того, насколько силен ваш запрос foo относительно того, что кто-нибудь порекомендовал бы. В вашем случае я бы предложил поискать «PDO query builder» и взглянуть на некоторые библиотеки и примеры / документацию. С точки зрения построения вашего собственного, простой способ — это массив пар значений ключей, где ключи являются столбцами таблицы, а значения — параметрами поиска, затем напишите функцию для преобразования этого массива в строку.