lapla Skrevet 12. august 2008 Del Skrevet 12. august 2008 (endret) Er det mulig å få bindvariabler til å returnere alle resultater? Eksempel blablalba where navn = :navnet og da sette inn en verdi som returnerer alle resultatene uten å bruke like? Vet det går ann å bruke like å legge til %. Og et tilleggspørsmål. Vil en spørring med like '%' gjør spørringen noe særlig tregere enn om en ikke hadde hatt det i where clausen i det hele tatt? Endret 12. august 2008 av lapla Lenke til kommentar
kaffenils Skrevet 12. august 2008 Del Skrevet 12. august 2008 En spørring med WHERE kolonne like '%' og en uten WHERE vil ikke det samme. NULL verdier vil ikke valideres til true ved bruk av LIKE '%'. Lenke til kommentar
lapla Skrevet 12. august 2008 Forfatter Del Skrevet 12. august 2008 En spørring med WHERE kolonne like '%' og en uten WHERE vil ikke det samme. NULL verdier vil ikke valideres til true ved bruk av LIKE '%'. Okei, det er ikke noe prob for min del. Det betyr likevel at det har liten betydning på tiden det tar å loade querien? Er litt betydningsfullt at querien ikke tar for mye tid skjønner du. Lenke til kommentar
blackbrrd Skrevet 12. august 2008 Del Skrevet 12. august 2008 (endret) Du kan jo teste selv? Tar ca 2 sek å teste... Endret 12. august 2008 av blackbrrd Lenke til kommentar
lapla Skrevet 12. august 2008 Forfatter Del Skrevet 12. august 2008 Du kan jo teste selv? Tar ca 2 sek å teste... Har testa og ser rimelig likt ut, men nå er ikke databasen jeg jobber mot særlig stor akkurat nå så får ikke testa ordentlig. Hadde gjerne om noen visste tatt i mot en forklaring på hvordan databasen vil behandle en like % om noen hadde hatt ork. Uansett så var det bare et bispørsmål.... Noen som vet om det går ann å bruke bind variabler å sette inn verdi som returnerer alt ? altså: where navn = :bindvariabel Må returnere eksakt resultat, og best mulig ytelse, så like er ikke et godt valg. Lenke til kommentar
blackbrrd Skrevet 12. august 2008 Del Skrevet 12. august 2008 Like er kun noe poeng å bruke når du ønsker muligheten til ikke-eksakt resultat. = fungerer fint. Hvis du skal sammenligne tekst så er syntaksen du skrev riktig for hql, mens den for sql er navn = ? I java: PreparedStatement ps = con.prepareStatement(".... WHERE navn = ?); ps.setString(1,"Ola nordmann"); ResultSet rs = ps.executeQuery(); Hvis du ikke alltid skal ha med navn i WHERE clausen så bygger du opp strengen som skal inn i preparedstatements med if og tilsvarende med setString biten. (2 if-setninger pr variabel mao) Lenke til kommentar
lapla Skrevet 13. august 2008 Forfatter Del Skrevet 13. august 2008 Like er kun noe poeng å bruke når du ønsker muligheten til ikke-eksakt resultat. = fungerer fint. Hvis du skal sammenligne tekst så er syntaksen du skrev riktig for hql, mens den for sql er navn = ? I java: PreparedStatement ps = con.prepareStatement(".... WHERE navn = ?); ps.setString(1,"Ola nordmann"); ResultSet rs = ps.executeQuery(); Hvis du ikke alltid skal ha med navn i WHERE clausen så bygger du opp strengen som skal inn i preparedstatements med if og tilsvarende med setString biten. (2 if-setninger pr variabel mao) Takk for svar. Med andre ord du må altså endre i selve spørringen. Det går altså ikke å sette inn en verdi i bindvariablen som gjør at du returnerer alle resultatene. Er forøvrig mot oracle DB det er snakk om. Lenke til kommentar
siDDis Skrevet 18. august 2008 Del Skrevet 18. august 2008 Er det ikkje mogleg å setja ps.setString(1,"%Ola"); for å finna alle som begynner på Ola? Lenke til kommentar
blackbrrd Skrevet 18. august 2008 Del Skrevet 18. august 2008 Er det ikkje mogleg å setja ps.setString(1,"%Ola"); for å finna alle som begynner på Ola? Hvis du bruker LIKE så vil du finne alle som slutter med Ola... Det er mest sannsynlig et søk og trådstarter vil ikke gjøre et søk på LIKE '%' hvis det ikke er skrevet inn noe navn. Lenke til kommentar
lapla Skrevet 18. august 2008 Forfatter Del Skrevet 18. august 2008 Er det ikkje mogleg å setja ps.setString(1,"%Ola"); for å finna alle som begynner på Ola? Hvis du bruker LIKE så vil du finne alle som slutter med Ola... Det er mest sannsynlig et søk og trådstarter vil ikke gjøre et søk på LIKE '%' hvis det ikke er skrevet inn noe navn. Ønsker som nevnt ikke å bruke like. Ønsker eksakte verdier. Om noen velger Ola som brukernavn, så ønsker jeg kun returnere for nøyaktig ola og ikke alle som begynner med ola. Det er hovedsaken med at jeg ønsker å bruke = istedet for like. Problemet er at med bruk av = istedet for like så kan en ikke sette inn %,* etc eller noe annet for å forklare til spørringa at du ønsker å få returnert alle verdier. Tror faktisk ikke det lar seg gjøre. Lenke til kommentar
mysjkin Skrevet 25. august 2008 Del Skrevet 25. august 2008 Ønsker som nevnt ikke å bruke like. Ønsker eksakte verdier. Om noen velger Ola som brukernavn, så ønsker jeg kun returnere for nøyaktig ola og ikke alle som begynner med ola. Det er hovedsaken med at jeg ønsker å bruke = istedet for like. Problemet er at med bruk av = istedet for like så kan en ikke sette inn %,* etc eller noe annet for å forklare til spørringa at du ønsker å få returnert alle verdier. Tror faktisk ikke det lar seg gjøre. Hva mener du egentlig? Vil du ha alt, Om noen velger Ola som brukernavn, så ønsker jeg kun returnere for nøyaktig ola og ikke alle som begynner med ola. eller vil du ikke ha alt? Problemet er at med bruk av = istedet for like så kan en ikke sette inn %,* etc eller noe annet for å forklare til spørringa at du ønsker å få returnert alle verdier. ??? M. Lenke til kommentar
lapla Skrevet 1. september 2008 Forfatter Del Skrevet 1. september 2008 (endret) Ønsker som nevnt ikke å bruke like. Ønsker eksakte verdier. Om noen velger Ola som brukernavn, så ønsker jeg kun returnere for nøyaktig ola og ikke alle som begynner med ola. Det er hovedsaken med at jeg ønsker å bruke = istedet for like. Problemet er at med bruk av = istedet for like så kan en ikke sette inn %,* etc eller noe annet for å forklare til spørringa at du ønsker å få returnert alle verdier. Tror faktisk ikke det lar seg gjøre. Hva mener du egentlig? Vil du ha alt, Om noen velger Ola som brukernavn, så ønsker jeg kun returnere for nøyaktig ola og ikke alle som begynner med ola. eller vil du ikke ha alt? Problemet er at med bruk av = istedet for like så kan en ikke sette inn %,* etc eller noe annet for å forklare til spørringa at du ønsker å få returnert alle verdier. ??? M. Du har altså en komboboks fylt med brukernavn. Verdien brukeren velger der settes inn som verdi i bindvariabelen :brukernavn. Hvis du da velger brukernavnet Ola så skal du ikke få resultater fra brukeren olaf32. Derimot er et av alternativene i komboboksen at du kan velge info fra alle brukere. Spørring 1: select * from brukerinfo where brukernavn like :brukernavn Spørring 2: select * from brukerinfo where brukernavn = :brukernavn :brukernavn = verdien til komboboksen. Hvis spørring type 1 er tatt i bruk, og komboboks verdien er Ola, så vil du returnere brukerdata for alle brukere som begynner med ola, altså du får informasjonen fra olaf33 også... Hvis du skal returnere data for alle brukere så setter du inn %. Hvis spørring 2 er tatt i bruk vil du få info fra kun brukeren ola. Men.. Hva skal en sette inn for å returnere resultat for alle brukere her ? Endret 1. september 2008 av lapla Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå