Я делаю поисковую систему, которая создает запрос в зависимости от того, что выбрано на странице поиска. Поскольку запрос ограничен, я не могу просто включить в него что-либо, и именно здесь я должен сделать все остальное с предложениями IF и запросить циклы while. Итак, в таблице нет поля возраста, но есть поле даты рождения, поэтому я использую функцию ЕСЛИ, чтобы проверить правильность возраста, а затем распечатываю имя пользователя (имена) в цикле while.

Это работает нормально, но мне также нужно добавить еще два поля в поиск, а именно: округ и город, прямо сейчас работаю над выбором округа на странице. Чего я не могу понять сам, так это логики того, как я должен распечатать пользователей, которые соответствуют всем необходимым полям, не имея 1000 IF ELSE.

Я подумал о том, чтобы выбрать и отфильтровать все правильные почтовые индексы для выбранного округа/региона, затем поместить их в массив, а затем проверить на нем выходной запрос цикла while, но это тоже не сработало.

В моей базе данных у меня есть 3 таблицы, которые выглядят так:

county_table
id, name_of_county

municipial_table
id, county_id, municipial_name

zip_code_table
zip, zip_place_name, municipial_id

Они предварительно сделаны для моей страны. Итак, учитывая почтовый индекс пользователя, мне придется выполнить два разных запроса SELECT, чтобы связать его с таблицей county_table (zip->municipial->county).

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

if($age>X){
     if($county==Y){
          if($city==Z){
               -OUTPUT RESULTS HERE-
} } }

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

Помощь очень ценится, большое спасибо.

0
Elodee 6 Мар 2011 в 17:31
Не очень хорошо разбираюсь в MySQL
 – 
mauris
6 Мар 2011 в 17:34
1
Пожалуйста, уточните, что вы имели в виду.
 – 
Elodee
6 Мар 2011 в 17:37
Пожалуйста, покажите SQL-запрос, который у вас есть. Нет никаких причин, по которым нельзя было бы добавить дополнительные условия прямо здесь. Также неясно, как user_table относится к zip_code_table.
 – 
mario
6 Мар 2011 в 17:45
SELECT * FROM user_table WHERE user LIKE '%username_here%' AND online_status = 0 AND email = 'email_here' Такой запрос вы получите, если заполните все поля. Причина, по которой я должен опустить возраст, например, заключается в том, что в базе данных дата рождения записывается так: ГГГГ.ММ.ДД. Весь сайт полагается на это, и есть функция, которую я использую, которая преобразует его в допустимый возраст и т. д. Итак, что я делаю с возрастом, так это просто извлекаю его, запускаю через функцию, чтобы получить XX возраст и if($age==$age_input){ OUTPUT RESULTS }
 – 
Elodee
6 Мар 2011 в 17:53
Вы также можете рассчитать возраст в SQL-запросе. Используйте, например, SELECT *, (2011-strftime('%Y', birthday)) AS age WHERE ... (имена функций зависят от базы данных, 2011 год должен быть рассчитан слишком очевидно). Затем используйте поле age в предложении WHERE. -- Точно так же вы можете использовать подзапрос для zip_code_table, как мне кажется
 – 
mario
6 Мар 2011 в 18:25

1 ответ

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

Вы делаете это неправильно.

0
Community 23 Май 2017 в 15:19