Поиск в базе данных MySql

Вопросы программирования БД, их оптимизации, резервирования и восстановления данных.

Модераторы: Trinity admin`s, Free-lance moderator`s

Ответить
vad
Junior member
Сообщения: 5
Зарегистрирован: 09 дек 2002, 18:27

Поиск в базе данных MySql

Сообщение vad » 09 дек 2002, 18:30

Пишу скрипт на PHP.
В базе данных имеется одна таблица: users
Таблица содержит 5 столбцов: пол(sex), возраст(old), страна(country), город(town), район(area)
Мне нужно сделать поиск по нескольким столбцам.

$query = "SELECT * FROM users WHERE sex = '$sex' AND old = '$old' AND country = '$ country' AND town = '$town' AND area = '$area' ";

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

Пожалуйста помогите!!!!!!!!!!!!!!

Аватара пользователя
a_shats
Advanced member
Сообщения: 5010
Зарегистрирован: 27 авг 2002, 10:55
Откуда: Москва
Контактная информация:

Сообщение a_shats » 09 дек 2002, 19:28

Разбейте условие выборки на две заключенные в скобках части. В одной из них - параметры, которые должны совпадать точно. Между ними - AND.
Во второй части - те, из которых некоторые ;) могут не совпадать с заданным условием. Между ними OR.
между обоими скобками AND.
А вообще - лучше при выборке указывать только точно заданные параметры.

vad
Junior member
Сообщения: 5
Зарегистрирован: 09 дек 2002, 18:27

Сообщение vad » 15 дек 2002, 07:46

Отлично!
А как произвести поиск с параметром "неважно" ?
<select name="sex">
<option value="">неважно</option>
<option value="мужчина">мужчина</option>
<option value="женщина">женщина</option>
</select>

Заранее СПАСИБО!

Аватара пользователя
a_shats
Advanced member
Сообщения: 5010
Зарегистрирован: 27 авг 2002, 10:55
Откуда: Москва
Контактная информация:

Сообщение a_shats » 15 дек 2002, 15:26

Сделать условие отдельной строкой (переменной), и включать в запрос только в случае, если при выборке не указано значение ("неважно") ;) - проще всего.

vad
Junior member
Сообщения: 5
Зарегистрирован: 09 дек 2002, 18:27

Сообщение vad » 15 дек 2002, 17:33

Логически я это понял. При помощи функции else :-) ? А как написать запрос, не знаю.......

Форма поиска: form.htm

<form name="form" method="post" action="search.php">

Город
<select name=city>
<option>город1</option>
<option>город2</option>
</select>
Пол
<select name=sex>
<option>женщина</option>
<option>мужчина</option>
<option>неважно</option>
</select>

</form>


Результат поиска: search.php

<?
?..

$query = "SELECT * FROM $userstable WHERE city ='$city' AND sex ='$sex'";
$result = MYSQL_QUERY($query);
$number = MYSQL_NUMROWS($result);
$i = 0;

IF ($number == 0) {
PRINT "<CENTER><P>Ничего не найдено</CENTER>";
} ELSEIF ($number > 0) {

$city = mysql_result($result,$i,"city");
$sex = mysql_result($result,$i,"sex");

PRINT "<table width=100% border=0 cellspacing=0 cellpadding=0>
<tr>
<td>Вы искали город: $city</td>
<td>Вы искали пол: $sex</td>
<td>Найдено: $number</td>
</tr>
</table>
<br>";

echo("<table width=100%><tr><td>Город</td><td>Пол</td>");

WHILE ($i < $number){


echo("<tr><td><$city</td><td>$sex</td><td>");

$i++;
}

}
PRINT "</table>";
?>

По этим файлам получится запрос: Город ? город1, Пол ? мужчина = находит всех из города1 и полом мужчина.
А нужно сделать запрос такой: Город ? город1, пол ? неважно. Если выбрать в этой форме «неважно», то не найдется ни одной записи. В таком случае, как же сделать поиск только по Городу 1 без выбора Пола ?

Аватара пользователя
a_shats
Advanced member
Сообщения: 5010
Зарегистрирован: 27 авг 2002, 10:55
Откуда: Москва
Контактная информация:

Сообщение a_shats » 15 дек 2002, 18:01

vad писал(а): ?
$addsex =" AND sex=".$sex;
$query = "SELECT * FROM $userstable WHERE city ='$city';
if ($sex=3) { // Ну типа или там $sex="неважно"
$query=$query.$addsex;
}
...

vad
Junior member
Сообщения: 5
Зарегистрирован: 09 дек 2002, 18:27

Сообщение vad » 15 дек 2002, 18:48

а у меня не получается. Выводит всех пользователей и приписывает всем женский пол :shock:

Аватара пользователя
a_shats
Advanced member
Сообщения: 5010
Зарегистрирован: 27 авг 2002, 10:55
Откуда: Москва
Контактная информация:

Сообщение a_shats » 15 дек 2002, 18:55

Понятно :sad:
Идти на php.org и читать соотв. мануалы (hint: mysql_fetch_array)
А, еще: на www.citforum.ru вроде лежала классика: книжка Майкла Грубера о SQL.

vad
Junior member
Сообщения: 5
Зарегистрирован: 09 дек 2002, 18:27

Сообщение vad » 15 дек 2002, 19:59

ok!

Ответить

Вернуться в «Серверы - ПО, Базы Данных и их использование»