Autor Zpráva
Kabu
Profil *
Ahoj,

máme databázi klientů se jmény a příjmením atd ...

na webu máme formulář ve kterém klienti vyplňují kolonku kdo jim doporučil naše stránky, je to samozřejmě pokaždý jinej string, pí. xxx, nebo pan yyy apod, vyskytují se v tom i tečky čárky atd ...

jak byste napsali sql dotaz pomocí LIKE, s tím že potřebuji porovnat sloupec Prijmeni v DB s timhle stringem ?, klasické LIKE to podle mě dělá jenom obráceně, kratší hledaný řetězec
umí porovnat s delším, např celým příjmením v DB, nebo se mýlím a neměl by to být problém?

Děkuji za odpověď.
Kabu
Profil *
ještě na doplnění, pro vyhledávání používám tento dotaz


$doporucil = $_POST['Doporucil'];
$query = "SELECT ClenskeID, concat(Prijmeni,' ',Jmeno) AS CeleJmeno FROM Klienti WHERE LOWER(Prijmeni) LIKE LOWER('%$doporucil%')";

ale to funguje jenom kdyz ten retez $_POST['Doporucil'] ve formuláři před hledáním zkrátím jenom na příjmení ale chtěl bych aby to v DB našlo ty příjmení která se shodují s částí toho řetězce doporučil, je to vůbec možné ?.

předem dík za odpovědi
Kajman_
Profil *
Takhle to snad najde, nebo ne máte pocit, že ne?
Kabu
Profil *
zdravim,

kdyz dam hledat ve sloupci Prijmeni retezec "pí. Jana Nováková" tak mi to radek v DB kde je Prijmeni "Nováková" opravdu takhle nenajde ...
Mastodont
Profil
Možné to samozřejmě je, ovšem musíš $_POST['Doporucil'] nějak rozdělit na jednotlivé části a pak hledat WHERE ... LIKE .. OR ... LIKE ... OR ... LIKE .....
BetaCam
Profil
na webu máme formulář ve kterém klienti vyplňují kolonku kdo jim doporučil naše stránky, je to samozřejmě pokaždý jinej string, pí. xxx, nebo pan yyy apod, vyskytují se v tom i tečky čárky atd ...

No mě už tohle přijde dosti nevhodné. Nedodržujete totiž pravidlo atomizace dat v DB. Proč v tom formuláři nemáte dvě kolonky pro získání údajů o tom kdo vás doporučil. Tedy kolonku jméno a kolonku Příjmení a do DB to neukládáte oddeleně ušetřil by ste si tim mnoho práce.

Pokud máte tu databázi navrženou takhle bude se vám s daty špatně pracovat a budete muset vymejšlet pomalé řešení jak tento problém obejít.

Takhle můžete třeba ten vstupní string pomocí explode rozsekat na segmenty a pak v cyklu dávat na každej segment SELECT, protože nikdy nemůžete vědět kterej ten segment je příjmení. Jenže to je stejně řešení jenom tak na oko, protože nikdy nebudete mít jistotu, že se vám vrátí validní data.

např.:

$doporučil = "pan Pavel Novák";

podle toho vašeho dotazu by to mělo vrátit všechny klienty s příjmením Novák ( což už mi samo osobě prijde jako blbost protože v DB můžete mít klidně 200 Nováků, ale dejme tomu)

Jenže nastává problém, že ten SELECT bude vracet i nevalidní data. Proč ... ?? No protože se klidně nejakej klient může jmenovat "Ota Pavel" nebo "Jan Pavel" jenže ten me přece nikomu nedoporučil a přesto mi ho SELECT vrátí jako "doporučitele".
Kabu
Profil *
zdravim,

to ze se vraci vic radku nevadi, on to prave v kancelari musi clovek rozhodnout a priradit to manualne v tomhle kroku, jednoznacne podle ClenskeID.

je to jenom takova pomucka aby to nemusel dlouho hledat.

to rozsekani na casti do pole pres explode me taky napadlo, potom z toho pole vyhazet treba stringy kratsi jak 3-4 char, no ale vic by se mi libilo kdyby to dokazala DB porovnat obracene.

tzn. projit vsechny Prijmeni a vybrat ta ktera jsou LIKE ten dlouhy string doporucil. to vazne na tohle tuhle funki neni hotovy elegantnejsi reeni ???

diky.
Kajman_
Profil *
No já byl v noci trošku mimo ;-) obráceně to můžete udělat asi takto nějak.

'$doporucil' like concat('%',lower(Prijmeni),'%')
BetaCam
Profil
Nebo taky můžes použít FULLTEXT, ale to je jak jit s tankem na komára. Každopádně Kajmanovo řešení je funkční a abych se priznal tak me vůbec nenapadlo :)
Kabu
Profil *
tak panove dekuji, funguje to uplne noblesne :) presne to jsem mel na mysli, diky Kajman !
Toto téma je uzamčeno. Odpověď nelze zaslat.