esiste un modo più semplice / pulito per codificarlo? [duplicare]

1

Ho un'app Web che utilizza ajax per filtrare i risultati del db. Pertanto, se si dispone di un elenco di 1000 widget, con ID compresi tra 1-1000, digitando numeri nel campo ID, è possibile restringere la ricerca. Digitando il numero 9 si interroga automaticamente il db per restituire solo i record che hanno un id che inizia con 9 ecc ... Lo stesso tipo di funzione esiste per i nomi dei widget.

Ecco come appare il codice in parte, per quanto riguarda le query:

get_widgets = function(id, name)
        local sql 
        if name==nil and id==nil then
                sql = "SELECT * FROM widgets"
        elseif addr == nil then
                sql = "SELECT * FROM widgets WHERE id LIKE '"..id.."%'"
        elseif tn==nil then
                sql = "SELECT * FROM widgets WHERE name LIKE '"..name.."%'"
        else
                sql = "SELECT * FROM widgets WHERE id LIKE '"..id.."%' AND name LIKE '"..name.."%'"
        end 

      ... logic to connect to db and execute query.
end

Basta chiedersi se c'è un modo più elegante per farlo. o se quello che ho è ok.

    
posta dot 09.04.2015 - 16:42
fonte

1 risposta

3

Le applicazioni di concatenazione SQL come questa beneficiano di una tecnica che chiamerò "1 = 1". Non conosco Lua, quindi userò "pseudo-Lua".

sql = "SELECT * FROM widgets WHERE 1=1 "

if id != nil then
    sql += "AND id LIKE '"..id.."%'"

if name != nil then
    sql += "AND name LIKE '"..name.."%'"

Se hai ancora bisogno dell'esclusività elseif , l'unica cosa che puoi realmente fare è iniziare con SELECT * FROM widgets e virare sulla clausola WHERE nella elseif .

    
risposta data 09.04.2015 - 16:48
fonte

Leggi altre domande sui tag