13. april 2004 - 17:51Der 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.
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";
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
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
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; }
Synes godt om
Ny brugerNybegynder
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.