Visualizzazione risultati 1 fino 12 di 12

Discussione: [mySQL] Selezionare una colonna se non è vuota

  1. #1
    Guest

    Predefinito [mySQL] Selezionare una colonna se non è vuota

    Ciao a tutti.

    Vi spiego il mio problema:
    ho una tabella nel database che raccoglie tutte le informazioni dei dati inviati da un form in homepage. Tutti i dati sono obbligatori, tranne l'invio di un'immagine. Io salvo l'immagine (se inviata) nel filesystem, e nel database inserisco il nome dell'immagine. Ora, se io devo selezionare l'ultima immagine inserita nella tabella, non posso prendere l'ultimo ID e vedere il nome dell'immagine, perche' potrebbe anche non esserci (non essendo obbligatorio). Quindi uso questa query:

    Codice PHP:
    $read_img = "SELECT * FROM threads WHERE file_name IS NOT NULL ORDER BY id DESC LIMIT 1";
    Nonostante questo, mi seleziona il valore della colonna file_name presente nel'ultimo record, anche se non c'e' nessuna immagine. Cosa sbaglio?

    Ciao!

  2. #2
    Guest

    Predefinito

    Controlla pure che il campo non sia semplicemente vuoto (che è cosa diversa da NULL)
    Codice PHP:
    $read_img = "SELECT * FROM threads WHERE file_name IS NOT NULL OR file_name != '' ORDER BY id DESC LIMIT 1";
    Ultima modifica di simpleticket : 04-02-2013 alle ore 16.49.19

  3. #3
    Guest

    Predefinito

    Citazione Originalmente inviato da simpleticket Visualizza messaggio
    Controlla pure che il campo non sia semplicemente vuoto (che è cosa diversa da NULL)
    Codice PHP:
    $read_img = "SELECT * FROM threads WHERE file_name IS NOT NULL OR file_name != '' ORDER BY id DESC LIMIT 1";
    Grazie mille, il problema era quello. Solo che al posto di OR ci va AND

    ciao!

  4. #4
    Guest

    Predefinito

    Citazione Originalmente inviato da threads Visualizza messaggio
    Grazie mille, il problema era quello. Solo che al posto di OR ci va AND

    ciao!
    Scusa, ma come fa un campo ad essere contemporaneamente NULL e vuoto? O è vera l'una (NULL) o è vera l'altra (vuoto).

  5. #5
    Guest

    Predefinito

    Citazione Originalmente inviato da simpleticket Visualizza messaggio
    Scusa, ma come fa un campo ad essere contemporaneamente NULL e vuoto? O è vera l'una (NULL) o è vera l'altra (vuoto).
    No il fatto e che non deve essere ne' NULL ne' vuoto.

    Quindi e' come se l'istruzione fosse: Estrai valori dove la colonna e' NOT_NULL E DIVERSA DA ""

  6. #6
    Guest

    Predefinito

    Citazione Originalmente inviato da threads Visualizza messaggio
    No il fatto e che non deve essere ne' NULL ne' vuoto.

    Quindi e' come se l'istruzione fosse: Estrai valori dove la colonna e' NOT_NULL E DIVERSA DA ""
    Sbagli la condizione AND ti rende vero l'intero l'intero costrutto se e solo se TUTTE le condizioni sono VERE, per cui se l'intera condizione WHERE è verificata, con l'uso di AND, se il campo è NULL e vuoto. Ma questo per costruzione è impossibile.
    Quello che esprimi in italiano si esplica con la condizione OR, ovvero la condizione è verificata se è vera almeno una delle componenti quindi o il campo è nullo o è vuoto.

  7. #7
    Guest

    Predefinito

    Citazione Originalmente inviato da simpleticket Visualizza messaggio
    Sbagli la condizione AND ti rende vero l'intero l'intero costrutto se e solo se TUTTE le condizioni sono VERE, per cui se l'intera condizione WHERE è verificata, con l'uso di AND, se il campo è NULL e vuoto. Ma questo per costruzione è impossibile.
    Quello che esprimi in italiano si esplica con la condizione OR, ovvero la condizione è verificata se è vera almeno una delle componenti quindi o il campo è nullo o è vuoto.
    No, perche' il controllo non si fa in positivo, ma in negativo. Ovvero, controlli che NON siano NULL e VUOTI, ed e' benissimo possibile che entrambe le condizioni siano verificate assieme, quando contiene qualcosa.

    La condizione e' che il campo sia pieno. Quindi o dici estrai i dati dove il campo e' pieno, oppure dove il valore del campo non e' null e contemporaneamente non e' vuoto.
    Ultima modifica di threads : 04-02-2013 alle ore 18.17.05

  8. #8
    Guest

    Predefinito

    Citazione Originalmente inviato da threads Visualizza messaggio
    No, perche' il controllo non si fa in positivo, ma in negativo. Ovvero, controlli che NON siano NULL e VUOTI, ed e' benissimo possibile che entrambe le condizioni siano verificate assieme, quando contiene qualcosa.
    Lascia stare come lo dici in italiano (semmai usa il latino - prova a cercare vel e aut).

    Fai come credi, ma un campo NON può essere NULL e vuoto contemporaneamente. (Se è vuoto non sarà NULL, e viceversa, fai una prova se non ci credi).

    Detto qesto se hai A e B (1 = vero, 0 = falso)

    A AND B è veso se A è vero E B è vero
    A OR B è vero se A è vero O B è vero, quindi se A è vero e B e falso, oppure se A è falso e B è vero.

    Prova a ripassare gli operatori logici.
    Ultima modifica di simpleticket : 04-02-2013 alle ore 18.24.18

  9. #9
    Guest

    Predefinito

    Citazione Originalmente inviato da simpleticket Visualizza messaggio
    Fai come credi, ma un campo NON può essere NULL e vuoto contemporaneamente. (Se è vuoto non sarà NULL, e viceversa, fai una prova se non ci credi).

    Detto qesto se hai A e B (1 = vero, 0 = falso)

    A AND B è veso se A è vero E B è vero
    A OR B è vero se A è vero O B è vero, quindi se A è vero e B e falso, oppure se A è falso e B è vero.

    Prova a ripassare gli operatori logici.
    Guarda che e' sintassi logica italiana...

    Seleziona tutto dalla tabella threads, dove la colonna file_name e' diversa da null e non e' vuota. ordine decrescente e un solo risultato.

    Ora supponiamo di avere la colonna file_name piena. E' diversa da null? si'. E' non-vuota? si'. Quindi usando AND mi restituisce true.

    Se usassi OR:

    Seleziona tutto dalla tabella threads, dove la colonna file_name e' diversa da NULL, oppure e' non-vuota.

    Supponiamo di avere la colonna file_name vuota. Resituira' true perche' e' diversa da NULL e lo stesso vale se il contenuto della colonna fosse NULL.

    Prova a ragionarci un po' sopra

  10. #10
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    @simpleticket, ha ragione @threads, la tua query intercetta i record in uno solo (così funziona OR) dei seguenti casi:
    - se il record ha file_name non nullo (ma pure uguale alla stringa vuota)
    - oppure se il record ha file_name con valore diverso dalla stringa vuota (ma pure NULL)

    Così è più chiaro?

    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  11. #11
    Guest

    Predefinito

    Scusate la momentanea assenza.

    In effetti avete ragione, mi ero fissato su una considerazione (che per dirla proprio tutta) mi era venuta in mente per un attimo ma che poi mi ha portato a difendere una posizione errata.

    Sorry ...

  12. #12
    Guest

    Predefinito

    Citazione Originalmente inviato da simpleticket Visualizza messaggio
    Scusate la momentanea assenza.

    In effetti avete ragione, mi ero fissato su una considerazione (che per dirla proprio tutta) mi era venuta in mente per un attimo ma che poi mi ha portato a difendere una posizione errata.

    Sorry ...
    Ma si' dai.... l'importante e' che ora funzioni

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •