Avatar billede martinbk Nybegynder
13. april 2004 - 17:51 Der er 4 kommentarer og
1 løsning

sammensætte streng til søgning i SQL DB

hejsa jeg har en gammel PHP side som indexere alle mine medier og gør det mugligt at søge i dem, nu har jeg så fået den tossede idé at jeg vil lave noget GUI i java istedet for en gammel webside, mit problem ligger nu i at få sammensat SQL strengen så jeg kan få det korrekte ResultSet at arbejde med udfra mine søge kriterier, min gamle PHP kode serud som følger

if (isset($medie_type) && !empty($medie_type)) {
    $tmpsql[] = "medie = '$medie_type'";
}
if (isset($medie_type_index) && !empty($medie_type_index)) {
    $tmpsql[] = "medie_type_index = '$medie_type_index'";
}
if (isset($medie_index) && !empty($medie_index)) {
    $tmpsql[] = "medie_index = '$medie_index'";
}
if (isset($artist) && !empty($artist)) {
    $tmpsql[] = "artist LIKE '%$artist%'";
}
if (isset($titel) && !empty($titel)) {
    $tmpsql[] = "titel LIKE '%$titel%'";
}
$sql = "SELECT * FROM archive WHERE " . implode(' AND ', $tmpsql) . " ASC";
?>

for ikke PHP kyndige: ideen med ovenstående er at tjekke om der er sat noget i de forskellige søgefelter, hvis et bestemt felt er sat smide en stump SQL kode i et array og til sidst sætte en søgestreng sammen via PHP's impode funktion, der blot løber et array igennem og sammensætter det til en streng med en bestemt iterator.

håber nogen kan give et hint

På Forhånd Tak
/Martin
Avatar billede myplacedk Nybegynder
13. april 2004 - 19:43 #1
Fx. noget i denne stil (utestet):

StringBuffer sqlb = new StringBuffer("1");
if (...)
  sqlb.append(" AND foo = 'bar'");
if (...)
  sqlb.append(" AND foo = 'bar'");
...
String sql = "SELECT * FROM archive WHERE ".sqlb." ORDER BY id ASC";
Avatar billede martinbk Nybegynder
14. april 2004 - 04:07 #2
den løsning har jeg skam overvejet, den giver jo blot et problem hvis jeg kun skriver noget i f.eks. artist ender min SQL sætning som
String sql = "SELECT * FROM archive WHERE AND artist = 'foobar' ASC";

hvilket entlig ikke var meningen nærmere
String sql = "SELECT * FROM archive WHERE artist = 'foobar' ASC";

jeg kan jo ikke vide om vedkommende der vil søge skriver noget i 1 felt eller i 3
Avatar billede myplacedk Nybegynder
14. april 2004 - 07:04 #3
Det er derfor jeg starter med et 1-tal. Så bliver det til "...WHERE 1 AND...", som skulle virke uden problemer.
Avatar billede martinbk Nybegynder
08. juni 2004 - 06:48 #4
dur ikke rigtigt, laver jeg f.eks. en søgning uden at indtaste noget i mine textfields får jeg en søning SELECT * FROM tabel WHERE 1
det retunere så samtlige linier i tabellen, hvilket jo absolut ikke var meningen
Avatar billede myplacedk Nybegynder
08. juni 2004 - 07:00 #5
Det er jo en helt anden ting. Det tjekker du før du begynder at lave SQL'en, eller du kan flette det sammen sådan her:
Du vil måske stille flere krav end det, fx. en minimum længde på søgeord.

StringBuffer sqlb = new StringBuffer("1");
boolean noget = false;
if (...) {
  sqlb.append(" AND foo = 'bar'");
  noget = true;
}
if (...) {
  sqlb.append(" AND foo = 'bar'");
  noget = true;
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester