Autor | Zpráva | ||
---|---|---|---|
Kabu Profil * |
#1 · Zasláno: 22. 6. 2007, 21:05:06
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 * |
#2 · Zasláno: 22. 6. 2007, 21:13:14
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 * |
#3 · Zasláno: 23. 6. 2007, 01:31:19
Takhle to snad najde, nebo ne máte pocit, že ne?
|
||
Kabu Profil * |
#4 · Zasláno: 23. 6. 2007, 02:09:03
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 |
#5 · Zasláno: 23. 6. 2007, 10:09:36
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 |
#6 · Zasláno: 23. 6. 2007, 10:28:52 · Upravil/a: BetaCam
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 * |
#7 · Zasláno: 23. 6. 2007, 10:40:41
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 * |
#8 · Zasláno: 23. 6. 2007, 11:30:48
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 |
#9 · Zasláno: 23. 6. 2007, 11:51:32
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 * |
#10 · Zasláno: 23. 6. 2007, 14:38:52
tak panove dekuji, funguje to uplne noblesne :) presne to jsem mel na mysli, diky Kajman !
|
||
Časová prodleva: 17 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0