[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Поиск по нескольким значениям
YanBess
Доброго времени суток.
Пишу социальный портал типа "Вконтакте" и столкнулся с такой проблемой как поиск людей.

Объясню упрощенно:
В MySQL есть таблица users в которой колонки name, surname, nick.
Думаю всем всё понятно что это за таблица и колонки в ней.

На странице поиска есть три поля - Имя, Фамилия и Ник, по которым можно найти определенного человека в БД. Но проблема в том, что я не могу понять как организовать такой поиск. Если я заполню все три поля (фамилю, имя и ник), то поиск даст результат, но а если я заполню лишь одно из полей (к принмкру только Имя), то база не выдаст всех пользователей с именем, которое я ввёл, т.к. остальные поля (Фамилия и Ник) будут пустыми.

Подскажите пожалуйста, как можно реализовать такой поиск (фильтр) пользователей. Передумал уже все способы.

Спасибо.



Спустя 30 минут, 10 секунд (14.09.2009 - 01:51) kirik написал(а):
Цитата (YanBess @ 13.09.2009 - 17:21)
то база не выдаст всех пользователей с именем, которое я ввёл, т.к. остальные поля (Фамилия и Ник) будут пустыми.

C чего это?
Вы индексы уже расставляли?

Спустя 17 минут, 29 секунд (14.09.2009 - 02:08) SunSet написал(а):
SELECT * FROM users WHERE name LIKE '$name' OR surname LIKE '$surname' OR nick LIKE '$nick'

Должно работать smile.gif

Спустя 11 часов, 38 минут, 15 секунд (14.09.2009 - 13:46) YanBess написал(а):
Цитата (SunSet @ 13.09.2009 - 23:08)
SELECT * FROM users WHERE name LIKE '$name' OR surname LIKE '$surname' OR nick LIKE '$nick'

Должно работать smile.gif

Ой простите за мою неопытность!!! biggrin.gif
А я всё искал ответ в условиях if biggrin.gif
Спасибо - всё работает!!!! biggrin.gif

Спустя 3 часа, 46 минут, 46 секунд (14.09.2009 - 17:33) Gradus написал(а):
Цитата
А я всё искал ответ в условиях if

PHP
if($name) $zap= '`name` LIKE \''.$name.'\'';
if(
$surname) $zap= '`surname` LIKE \''.$surname.'\'';
if(
$nick) $zap= '`name` LIKE \''.$nick.'\'';
if(
$zap) "SELECT * FROM `users` WHERE ".$zap.""

Первый вариант солиднее smile.gif

Спустя 1 час, 52 минуты, 45 секунд (14.09.2009 - 19:26) glock18 написал(а):
PHP
if($name$zap'`name` LIKE \''.$name.'\'';
if(
$surname$zap'`surname` LIKE \''.$surname.'\'';
if(
$nick$zap'`name` LIKE \''.$nick.'\'';
if(
$zap"SELECT * FROM `users` WHERE ".$zap.""


сработает только последнее условие. оно так и задумано? smile.gif

Спустя 6 часов, 2 минуты, 52 секунды (15.09.2009 - 01:29) Gram написал(а):
парва

Спустя 1 день, 10 минут, 39 секунд (16.09.2009 - 01:40) Gradus написал(а):
Цитата

сработает только последнее условие. оно так и задумано?

Не внимательно прочёл пост.
Тогда первое что в голову пришло smile.gif
PHP
if($name) $zap[]= '`name` LIKE \''.$name.'\'';
if(
$surname) $zap[]= '`surname` LIKE \''.$surname.'\'';
if(
$nick) $zap[]= '`name` LIKE \''.$nick.'\'';
if(
$zap)
{
 $what='';
for(
$i=0;$zap[$i];$i++) $what.=($i>0)?' or '.$zap[$i]:$zap[$i]; 
"SELECT * FROM `users` WHERE ".$what.""
}

Спустя 38 минут, 39 секунд (16.09.2009 - 02:18) kirik написал(а):
Gradus
Кто же через for элементы массива "склеивает"? implode чем не угодил? smile.gif


_____________
Заснул на клавиатуре, если отвечаю, значит, что-то снится!!![FONT=Courier][COLOR=red]
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.