Я позволяю пользователям искать мою базу данных данные городом. Мой запрос похож:
$results = mysql_query("SELECT * FROM mydb WHERE City='".$city."' LIMIT 10");
Я хочу, чтобы пользователь смог искать 'все города', таким образом, я хотел бы любому, удаляют ГДЕ оператор если $city == 'все города'; или используйте подстановочный знак для, ГДЕ оператор, который соответствует всем городам в дб.
Я раньше имел оператор IF, который переключился между двумя запросами, но я хочу добавить больше фильтров как страны страны/всей, индексы индекса/всего, и т.д., Таким образом, я сохранил бы один динамический SQL-запрос.
Что ж, у вас все еще может быть только один запрос и динамическое построение предложения where, как таковое:
$where = '';
// conditional statements (if/else, switch) for populating the where clause
$where .= " WHERE City = '{$city}'";
$where .= " AND Country = '{$country}'";
$results = mysql_query("SELECT * FROM mydb{$where} LIMIT 10");
Одним из способов может быть оператор case:
WHERE City = case when '$city' = 'All cities' then City else '$city' end
Если пользователь ищет «Все города», это превращает оператор WHERE в:
WHERE City = City
Что всегда верно (по крайней мере, для ненулевые города;))
PS Убедитесь, что вы выполняете эти запросы, используя учетную запись MySQL, доступную только для чтения. Пользователь мог вводить забавные вещи в параметр $ city
!
Вы можете попробовать
WHERE City like '$city'
и разрешить пользователям вводить подстановочные знаки, если вы думаете, что они готовы к этому.
хотя я не программист PHP, этот псевдокод может предложить вариант... условно построить ваш where clause. Кроме того, я бы сделал это с параметризованными запросами вместо прямого построения строк, чтобы предотвратить атаки sql-инъекции.
cYourSQL = "select * from YourTable where "
cAndRequired = ""
if city is NOT "all cities"
cYourSQL = cYourSQL + cAndRequired + " city = 'YourParameterValueProvided' "
cAndRequired = " AND "
endif
Теперь всегда добавляйте выбор страны
cYourSQL = cYourSQL + cAndRequired + " country = 'YourCountryValue' LIMIT 10 "
Выполните запрос