Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    MYSQL Where valore nullo

    Salve a tutti,

    Vi chiedo una piccola delucidazione sui metodi per vedere se un campo ha valore nullo...
    Cercando un po in internet ho trovato un po di informazioni diverse... io inizialmente avevo pensato a

    WHERE campo=NULL

    cercando ho trovato che il metodo dovrebbe essere

    WHERE campo IS NULL

    Però cosa che non ho capito è che a volte i campi non vengono riconosciuti come nulli anche se non hanno niente, e quindi bisogna fare

    WHERE campo=''

    Come posso gestire al meglio tutto?

    va bene fare WHERE campo='' OR campo IS NULL?

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2012
    Messaggi
    144
    Credo che tutto dipenda da come hai creato il campo. Se hai messo la spunta su NULL dovrebbe funzionare. Se però nel campo è presente anche uno spazio questo non è più NULL. Mi è capitato poco tempo fa e ho risolto mettendo la spunta su NULL però aspetta la risposta di qualcuno più esperto

  3. #3
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Su altri DB farei cosi:

    ...... WHERE ((CASE WHEN C1 IS NULL THEN '' ELSE C1 END) = '')

    ....... WHERE ((Len([C1] & ""))=0)

    ....... WHERE ((Nz([C1],""))="")

    dove C1 è il nome del tuo campo


    Forse su MySql la seconda "versione" funziona, diversamente devi adattare


    .
    Ultima modifica di nman; 17-01-2015 a 01:35

  4. #4
    diciamo che esistono anche ISNULL e COALESCE per gestire queste situazioni

  5. #5
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Non sei nell'obbligo di definire un campo 'null capable'. Se definisci un campo alfanumerico come "not null" allora puoi fare campo = ''.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  6. #6
    Quote Originariamente inviata da alemix Visualizza il messaggio
    Però cosa che non ho capito è che a volte i campi non vengono riconosciuti come nulli anche se non hanno niente, e quindi bisogna fare

    WHERE campo=''

    Come posso gestire al meglio tutto?

    va bene fare WHERE campo='' OR campo IS NULL?
    Un campo definito NULL e mai valorizzato e' NULL e lo trovi con IS NULL
    Un campo valorizzato e poi rimosso oppure valorizzato con "" empty (vuoto), Non e' piu' NULL ma EMPTY e lo trovi con campo = ''

    Se un campo definito NULL e proprio tale, non risponde alle aggregazioni (count, avg ecc.)
    Un campo NULL ma diventato EMPTY invece risponde alle aggregazioni

    Se vuoi ricondurre a NULL un campo diventato EMPTY devi espressamente aggiornarlo:
    update tab set campo = NULL perche' da solo non tornera' mai NULL

    Riassumendo i campi possono avere tre diverse condizioni, NULL, EMPTY o valorizzati
    Nel tuo caso va bene come hai deciso di fare, sempre che la condizione di NULL/EMPTY non debba essere diversificata.

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

  7. #7
    Grazie delle risposte a tutti.

    Rispondo più a piero, perchè quello che ha forse di più azzeccato il caso.
    La questione che cercavo di capire era più che altro come veniva gestito il NULL... nel senso che ci sono campi che possono essere nulli e campi che non lo possono essere.
    Se io ho un campo che è NOT NULL, e in fase di assegnazione (che sia via codice PHP o da query MYSQL) io non assegno un campo, questo come viene registrato?

    Facciamo ipotesi:
    Campo Prodotto
    Campo Prezzo

    tutti e 2 NOT NULL

    se io assegno a Prodotto='Mela' e Prezzo='3' (lasciamo perdere il fatto che non si assegna così) posso mettere nel WHERE che se il campo Prezzo='0' allora la Mela non viene selezionata

    Se invece io assegno
    Prodotto='Pera' e prezzo non la considero, immagino lui assegni direttamente un valore ='0' no? e in questo caso facendo la clausola WHERE prezzo IS NULL non dovrebbe trovare nulla no?

    Almeno vedendo il phpmyadmin

    Ora solo un ultimo dubbio, se io ho un campo text, e questo campo è NOT NULL, se io in fase di assegnazione non gli assegno niente, questo da phpmyadmin non mi da nulla, come se fosse vuoto, ma in pratica è come se io avessi assegnato un TEXT='' qundi lui non è NULL ma contiente '' giusto?

    PS:
    Continuo a non capire però... sto facendo prove...

    Campo ISBN (sono dei libri) valore mai assegnato
    do nella query

    WHERE ISBN='NULL'

    poi siccome è un pagina PHP dico

    if($record[ISBN]= NULL){
    echo "manca ISBN";
    }

    Perfetto funziona.

    Vado da Phpmyadmin a vedere un po il tutto e mi da dalla struttura NULL il valore no, quindi deve essere un NOT NULL. Per sicurezza controllo nei dati e mi da dei valori nulli con = 0.

    Perfetto cambio il tutto da Null ad = 0 e non vede niente! come se non ci fossero valori a 0... come mai secondo voi?
    Ultima modifica di alemix; 19-01-2015 a 18:21

  8. #8
    se una colonna è not nullable, quando cerchi di scrivere una riga senza aver valorizzato quella colonna il ragazzo dovrebbe lamentarsi. a meno che tu non abbia settato un default

  9. #9
    La questione che cercavo di capire era più che altro come veniva gestito il NULL... nel senso che ci sono campi che possono essere nulli e campi che non lo possono essere.
    Se io ho un campo che è NOT NULL, e in fase di assegnazione (che sia via codice PHP o da query MYSQL) io non assegno un campo, questo come viene registrato?
    per farla breve pensa al NULL come ad un campo che non esiste. Quindi se e' NULL viene ignorato dal conteggio e dalle aggregazioni in genere.

    Quindi NULL non e' vuoto (empty) ma semplicemente NON esiste. Se nel campo NULL inserisci qualcosa questo cessa di fatto di essere NULL (opposto di true) ma diventa NOT NULL (il campo e' TRUE) anche se nelle caratteristiche della tabella e' segnato come NULL. Per ritornare NULL devi settarlo in modo esplicito : update ...set campo = NULL (senza apici altrimenti diventa una stringa "NULL" e non un bool.

    In pratica se vedi valorizzata la flag del NULL significa solo che il campo PUO' tornare NULL e/o in mancanza di valore nell'inserimento sara' messo NULL

    Nel tuo caso non serve mettere il campo ISBN a NULL (intanto perche' ogni libro ha il suo) ma ti basta NOT NULL con il suo default (empty)

    where campo IS NULL trova solo i campi NULL
    where campo is NOT NULL trova i vuoti (empty) ed i valorizzati
    where campo = '' trova solo i campi vuoti ma non quelli ancora NULL o con valori inseriti

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

  10. #10
    Ok perfetto chiarissimo... Ora dovrei esserci.

    Il discorso che facevi tu, che ISBN non sia NULL a volte è possibile. Lo so che ogni libro dovrebbe avere un ISBN... però per come sono messo io ora mi capita di dover inserire senza quel dato, lasciando così il valore vuoto.
    Difatti queste query mi servono solamente per una pagina di "controllo", cioè una pagina dove vedo se ci sono campi vuoti per un determinato oggetto, se si me lo segnala con relativa mancanza.
    Quindi se ISBN non c'è mi segnala che il libro che sto controllando manca il valore ISBN.

    Alla fine quindi per sicurezza, mi conviene mettere tutte e 3 le condizioni nella query con un OR, in modo da essere sicuro.

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.