[ mr.zhile @ 25.11.2008. 08:50 ] @
| @MODERATORI
Da li da postavim ovo pitanje ovde ili da otvorim temu?
Imam ovaj upit koji treba da vrsi pretragu tabele
Code:
select * from T_TABELA
where KNJIGOVOSTVENA_SIFRA like '%%'
and SIFRA_PROIZ like '%%'
and NAZIV like '%%'
and TIP_LICA like '%%'
and NACIN_VODJENJA like '%%'
and TIP_TOVA like '%%'
and REG_BROJ_GAZDINSTVA like '%%'
and BROJ_POR_RESENJA like '%%'
and MATICNI_BROJ like '%%'
and POST_BROJ like '%%'
and MESTO like '%%'
and ADRESA like '%%'
Problem je sledeci,ako je zapis u tabeli takav da se ne unesu svi podaci upit ga ignosise,cak bez unetih uslova,upit vraca samo zapise koji imaju sve podatke unete...kako ja kapiram ...kad nista nije uneto ovaj upit bi trebalo da ignorise where uslov,ali on to ne radi..
Pitanje:Gde gresim?Kako da resim problem?
Da napomenem probao sam umesto and da stavim or ali onda ne radi NISTA!!! |
[ savkic @ 25.11.2008. 12:00 ] @
> @MODERATORI
> Da li da postavim ovo pitanje ovde ili da otvorim temu?
U posebnu naravno, ako otvaraš novo pitanje onda treba i nova tema. Uradio sam to ja sada.
> select * from T_TABELA
> where KNJIGOVOSTVENA_SIFRA like '%%'
Dovoljan je jedan %.
> Problem je sledeci,ako je zapis u tabeli takav da se ne unesu svi podaci upit ga ignosise,cak bez unetih uslova,upit vraca samo zapise koji
> imaju sve podatke unete...kako ja kapiram ...kad nista nije uneto ovaj upit bi trebalo da ignorise where uslov,ali on to ne radi..
Imaš li NULL slogove u tabeli? Ako da, onda POLJE LIKE '%' neće ništa vratiti jer NULL nije vrednost već stanje. Moraš koristiti:
1) COALESCE(POLJE, '') LIKE '%'
2) (POLJE LIKE '%' OR POLJE IS NULL)
[ sasaz2008 @ 25.11.2008. 12:02 ] @
U LIKE klauzuli znak '%' zamenjuje deo stringa. Npr.:
IME
-------
PERA
MIKA
LAZA
MILAN
SELECT ....
WHERE IME LIKE 'MI%'
Gornji upit daje slogove u kojima sadržaj polja IME počinje MI, a to su MIKA i MILAN.
SELECT ....
WHERE IME LIKE '%I%'
Ovaj upit daje slogove u kojima sadržaj polja IME sadrži slovo 'I', a to su u ovom slučaju ponovo MIKA i MILAN.
[ mr.zhile @ 25.11.2008. 12:16 ] @
HVALA RESIO SAM PROBLEM!!!
Ubacio sam
or polje is null i reseno
[ sasaz2008 @ 25.11.2008. 12:37 ] @
>Ubacio sam or polje is null i resen
Upit je u ovom slučaju i previše komplikovan. Uzgred, da li se ovakvi upiti dinamički kreiraju iz Delphi koda ili je ovo samo teoretski postavljeno pitanje? Kako Igor reče, NULL je stanje ne vrednost, i za ovakve (osnovne) tabele se obično za polja dodaje NOT NULL pri kreiranju same tabele.
[ mr.zhile @ 25.11.2008. 13:11 ] @
@sasaz
Da upit se dinamicki kreira iz Delphija i izmedju %% stavljam edit.tex,tako ada mi nije bas nanjjasnije
ovo?
>>COALESCE(POLJE, '') LIKE '%' (POLJE LIKE '%' OR POLJE IS NULL)
Gde bi se u ovom slucaju opisalo edit.tex?
[ sasaz2008 @ 25.11.2008. 13:59 ] @
> Da upit se dinamicki kreira iz Delphija i izmedju %% stavljam edit.tex,tako ada mi nije bas nanjjasnije ovo?
U slučaju dinamičkog kreiranja upita, upit u prvom postu bi se sveo na običan SELECT bez WHERE klauzule pošto za njom nema potrebe, odnosno onoliko LIKE koliko je zaista i neophodno. T.j., za svako edit polje u formi koje korisnik popunjava radi fleksibilne pretrage, dodaje se u provremenu promenjivu ta LIKE konstrukcija ukoliko korisnik to zaista zahteva (tj. nije prazno). Time je odziv neuporedivo brži i izbegava se nepotrebno korišćenje ostalih LIKE klauzula.
Drugo, upotrebom NOT NULL u opisu svih polja osnovnih tabela, koja u većini slučajeva sva moraju imati vrednosti, izbegava se komplikacija sa IS NULL. Naravno, sve to zavisi od zahteva.
[ mr.zhile @ 25.11.2008. 14:12 ] @
Lepo to zvuci aj postavi neki primer kako to funkcionise..
[ sasaz2008 @ 25.11.2008. 14:55 ] @
> Lepo to zvuci aj postavi neki primer kako to funkcionise..
Primer je suvišan, ali ukratko, nešto poput:
Code:
Var
upit, kl,s: string;
begin
upit:='SELECT * FROM T_TABELA ';
kl:='';
s:=trim(edit1.text);
if s<>'' then
begin
if kl<>''
then kl:=kl+' and ';
kl:=kl+ [naziv polja] + 'LIKE ''%'+s+'''%'' // i sl. uz IS NULL po potrebi
end; //tako i za ostala edit polja
if kl<>'' then
upit := upit + 'WHERE '+ kl
...
Tabela gde sva polja moraju imati vrednosti bi izgledala ovako:
Code:
CREATE TABLE T_TABLE (
ID ...
KNJIGOVOSTVENA_SIFRA VARCHAR(10) NOT NULL,
... itd
[Ovu poruku je menjao sasaz2008 dana 25.11.2008. u 16:37 GMT+1]
[ mr.zhile @ 25.11.2008. 15:41 ] @
@sasaz
HVALA znacice mi ovaj primer
[ mehanizamm @ 28.12.2008. 14:30 ] @
Problem ne razumem..
Koristim lazarus i pocetnik sam..
ovako glasi mysql upit..
SELECT * FROM tabela1 WHERE ime LIKE 'mi%';
e sad kako taj isti upit da napisem u lazarusu
SQLQuery1.SQL.Text := 'SELECT * FROM tabela1 WHERE ime LIKE mi%';
tj da na mi% dodam apostrofe?? KAKO??
[ savkic @ 28.12.2008. 16:58 ] @
> SQLQuery1.SQL.Text := 'SELECT * FROM tabela1 WHERE ime LIKE mi%';
> tj da na mi% dodam apostrofe?? KAKO??
Pokušaj: SQLQuery1.SQL.Text := 'SELECT * FROM tabela1 WHERE ime LIKE ''mi%''';
[ mehanizamm @ 28.12.2008. 17:33 ] @
Resio sam problem...
SQLQuery1.SQL.Text := 'SELECT * FROM tabela1 WHERE ime LIKE' + QuotedStr('mi%');
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|