Помощ за търсачка със сложно търсене

niki4ko

Registered
Правя си търсачка със сложно търсене. Имам примерно 4 текстови полета. При запис в четирите полета излиза един уникален резултат, но как може когато някоя от променливите липсва да ми излиза възможно най-уникалния резултат?
 
niki4ko каза:
Правя си търсачка със сложно търсене. Имам примерно 4 текстови полета. При запис в четирите полета излиза един уникален резултат, но как може когато някоя от променливите липсва да ми излиза възможно най-уникалния резултат?

Аз не те разбрах как "търсачка със сложно търсене" ?
 
Пример:
Имам таблица с имена на полета - Номер на кабинет, име на служител, телефон и имам запис
1 - 604, Киро, 111 и запис
2 - 602, Киро, 123.
В търсачката пиша Киро и не знам телефонния му номер и стаята му. Излизат ми всички записи съдържащи Киро. Но когато напиша Киро 111 искам да ми излиза само Киро от стая 604, в случай, че искам да знам в коя стая е този служител.
Формуляра ми е с три текстови полета - Номер на кабинет, име на служител, телефон.

Ето и друг пример: http://amam.bg/?pg=search&LO=&session=11745564245506810
само, че при мен са текстови полета, а не отметки.

Разбрахте ли ме?
 
ясно значи имаш една форма с 4 полета

име - ime
телефон - telefon
кабинет - kabinet
запис - zapis

където латинските са name на input-а

след това взимаш записа

Код:
$imes = trim($_GET['ime']);
$telefons = trim($_GET['telefon']);
$kabinets = trim($_GET['kabinet']);
$zapiss = trim($_GET['zapis']);

if($imes !="")
{
$ime = $imes;
}
else
{
$ime = "%%";
}

if($telefons !="")
{
$telefon = $telefons;
}
else
{
$telefon = "%%";
}

if($kabinets !="")
{
$kabinet = $kabinets;
}
else
{
$kabinet = "%%";
}

if($zapiss !="")
{
$zapis = $zapiss;
}
else
{
$zapis = "%%";
}

и след това викаш заявката по следния начин:

SELECT * FROM `table` WHERE ime LIKE '$ime' AND telefon LIKE '$telefon' AND kabinet LIKE '$kabinet' AND zapis LIKE '$zapis'


Моля, ако нещо не ти е ясно по него питай, че не е тестван защото нямам къде и директно съм писал
 
Леле човек златен си точно това ми трябваше :) Само ще ми разясниш ли нещо при следния случай:
Код:
if($imes !="") 
{ 
$ime = $imes; 
} 
else 
{ 
$ime = "%%"; 
}

т.е. ако има променлива $imes, то $ime = $imes, а ако няма какво ще рече $ime = "%%"; ?
 
ако не правиме тази проверка ако е празно ще търси ред в които е празно, а така с това: $ime = "%%"; показва всяка дума каквато и да е.

дори мойе и така.. но за други ситуации

$ime = trim($_GET['ime']);

и правиш заякка:

SELECT * FROM `table` WHER ime LIKE '%$ime%'

и така примерно търсиш дума "кон", ще ти покаже всички думи в които я има:

конспиратор
конски
ерконс
и тн.
 
Ааааа ясно...благодаря ти много човек.Надявам се и аз някога да ти бъда полезен :)
 
jooorooo каза:
ако не правиме тази проверка ако е празно ще търси ред в които е празно, а така с това: $ime = "%%"; показва всяка дума каквато и да е.

дори мойе и така.. но за други ситуации

$ime = trim($_GET['ime']);

и правиш заякка:

SELECT * FROM `table` WHER ime LIKE '%$ime%'

и така примерно търсиш дума "кон", ще ти покаже всички думи в които я има:

конспиратор
конски
ерконс
и тн.

Не е ли най-лесно да сложиш променливите директно в заявката?
$query="SELECT * FROM `table` WHERE ime LIKE '%$ime%' AND telefon LIKE '%$telefon%' AND kabinet LIKE '%$kabinet%' AND zapis LIKE '%$zapis%'";
така си спестяваш ИФ-овете, които смятам в момента за безсмилени.

Обаче, по добрият вариант е да правиш проверка за същестуващите критерии и да търсиш само по тях, а не по всички критерии (за да намалиш натоварването на mysql-a)
 
Slavei ако ги сложиш директно променливите, не е добре, ако пишеш примерно име Сия, а има и Анастасия ще ти изкара и двата резултата, затова не е много удачно.
 
jooorooo каза:
Slavei ако ги сложиш директно променливите, не е добре, ако пишеш примерно име Сия, а има и Анастасия ще ти изкара и двата резултата, затова не е много удачно.

аз пък смятам, че е удачно. По добре да ми изкара няколко резултата, от колкото аз да се мъча два часа да си спомня как по дяволите се пише някое завъртяно име... Или вместо да пиша, някакво дълго име, аз мога да напиша само част от него Или пък знам, че някои си там се казва Kарагеоргиев или нещо такова, но да се окаже, че се пише с тире: Кара-Георгиев, като напиша част от името и си решавам проблема...
Я си представи, че на телефона те чака клиент и ти се налага да направиш справка за "Bulgarian Gateway - Велико Търново"? Естествено, че няма да пишеш цялото име, което тъй или иначе като ти го изтрелят по телефона няма да чуеш цялото ;) Пишеш думата, която и до където си я чул и като видиш резултатите се ориентираш...
 
Да, но когато става въпрос за база със стотици записи при написването на думата ИВАН примерно ще ти излезнат много записи. Затова не е удачно и в моя случай предложението на jooorooo избегва този случай.
 
само да кажа че е не е добре когато $ime=' ' да се прави да търси с % по добре изобщо да не участва в завката . Просто ще става по бързо и няма да товари толкова СЯЛ
 
както каза мутето аз имам друго предложение.
Пак е с ифове
пример:
$sql = '';
if(isset($_GET['ime'])){
$sql .= 'ime LIKE '%$_GET['ime']% ';
}
if(isset($_GET['telefon']) && isset($_GET['ime'])){
$sql.= 'AND telefon LIKE '%$_GET['telefon']% ';
}
else {
$sql.= 'telefon LIKE '%$_GET['telefon']% ';
}
и така нататък и накрая в заявката :
SELECT * FROM `table` WHERE $sql

може и да е тъп примера ,но при толкова записи може и да ти спести мъките..
а и още нещо..
филтрирай си всичко изпратено било то с POST или GET ..
или може да имаш много ядове..
 
Здравейте!

Чета темата (само минавам) и ми изскача нещо, което ми заковава вниманието:

филтрирай си всичко изпратено било то с POST или GET ..

Бафиту, ако не те затруднявам, можеш ли да поясниш?
 

Back
Горе