Visualizzazione dei risultati da 1 a 5 su 5

Discussione: Query Non Funzionante

  1. #1
    Utente di HTML.it L'avatar di Lucada
    Registrato dal
    Apr 2005
    Messaggi
    176

    Query Non Funzionante

    Salve,

    ho un piccolo problema con una query.

    Ho sul db una tabella contenente delle strutture alberghiere... le strutture possono essere attive e non attive ovviamente quindi visualizzabili al pubblico e non visualizzabili.

    In più le strutture possono essere inserite dall'amministratore in varie aree di interesse... (la prima è d'obbligo le altre no)

    Esempio:

    Hotel La Ginestra -> struttura attiva -> temi d'interesse (mare - hotel - benessere).

    Io quando vado a cliccare dal sito sull'area "benessere" vorrei che mi comparisse fuori questa struttura che ne fa parte.

    La query che ho realizzato è la seguente:

    codice:
    "SELECT * FROM strutture where sezione = '" . $varcat . "' OR sezionedue = '" . $varcat . "' OR sezionetre = '" . $varcat . "' OR sezionequattro = '" . $varcat . "' OR sezionecinque = '" . $varcat . "' and attivo = 1";
    Soltanto così non mi funziona l'ultimo campo e quindi me le visualizza tutte al contrario se invece faccio così e faccio il controllo al singolo tema:

    codice:
    "SELECT * FROM strutture where sezione = '" . $varcat . "' and attivo = 1";
    In questo caso va da Dio... cioè se è attiva me la visualizza altrimento no.

    Qualcuno è in grado di aiutarmi visto che a me servirebbe un qualcosa come nel caso precedente potendo far la query su più campi?

    Grazie
    Il vero io è quello che tu sei, non quello che gli altri hanno detto di te. [Paulo Coelho]

  2. #2
    di certo e' che a causa della precedenza degli operatori quello che e' in OR va tra parentesi tonde.

    Dovresti anche evitare di scrivere righe troppo lunghe per la difficolta' di lettura che comporta il dover scorrere la barra di visualizzazione. Per esempio:

    codice:
    "SELECT * 
    FROM strutture 
    where (
    sezione = '" . $varcat . "' 
    OR sezionedue = '" . $varcat . "' 
    OR sezionetre = '" . $varcat . "' 
    OR sezionequattro = '" . $varcat . "' 
    OR sezionecinque = '" . $varcat . "' 
    )
    AND attivo = 1";
    il codice rimane molto piu' leggibile per tutti e ti semplifichi la vita con il cut & paste


    edit... difficolta' relativa, nel senso che se il codice non e' conosciuto e la riga lunga e di poco interesse, quando arrivi al fondo non ti ricordi piu' di cosa c'era scritto all'inizio. Per me basta e avanza per rinunciare a leggere e saltare il post.... ovviamente IMHO e non direttamente rivolto a te ma in generale.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Utente di HTML.it L'avatar di Lucada
    Registrato dal
    Apr 2005
    Messaggi
    176
    Emh... prendo appunti hai perfettamente ragione... sono il primo ad annoiarmi in un caso del genere.

    Comunque sia grazie del consiglio, questa cosa delle tonde mi mancava.
    Alla fine quindi funziona come in matematica... risolve prima quello dentro le tonde e poi quello fuori no?

    Grazie.
    Luca
    Il vero io è quello che tu sei, non quello che gli altri hanno detto di te. [Paulo Coelho]

  4. #4
    Originariamente inviato da Lucada
    Comunque sia grazie del consiglio, questa cosa delle tonde mi mancava.
    Alla fine quindi funziona come in matematica... risolve prima quello dentro le tonde e poi quello fuori no?

    Grazie.
    Luca
    ... la precedenza degli operatori logici e' simile come risultato agli operatori in matematica, infatti AND = x e OR = +

    5 + 2 * 10 = 25 mentre (5 + 2) * 10 = 70

    scrivere: A or B or C AND D e' uguale a scrivere: A or B or (C AND D)

    mentre a te serve: (A or B or C) AND D

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    Utente di HTML.it L'avatar di Lucada
    Registrato dal
    Apr 2005
    Messaggi
    176
    E' un piacere incontrare gente come te... grazie mille per la spiegazione.

    Luca
    Il vero io è quello che tu sei, non quello che gli altri hanno detto di te. [Paulo Coelho]

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.