Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di james
    Registrato dal
    Jun 2002
    Messaggi
    1,481

    controllare se tutti i campi sono vuoti [mysql]

    Ho un'anagrafica con i soliti campi, di cui le "note" ed altri sono facoltativi. In una tabella tiro fuori tutti gli elementi, ma se nessuno di loro ha compilato il campo note io vorrei non visualizzare per nulla l'intera colonna. Come faccio in mysql a fare una query che mi controlla se tutti i campi di un valore sono uguali a NULL? Ho pensato di fare una query per ogni campo facoltativo che seleziona tutto con delle wehre del tipo
    Query1: WHERE note<>NULL
    Query2: WHERE email<>NULL
    ecc...

    poi per ogni query controllo se c'è almeno un'istanza, e se c'è significa che devo visualizzare la colonna del campo relativo. Ma così devo fare una query per ogni campo facoltativo ed una che mi tira fuori i dati, come si può ottimizzare una cosa del genere?

  2. #2
    Utente di HTML.it L'avatar di james
    Registrato dal
    Jun 2002
    Messaggi
    1,481
    se ci fosse un modo per concatenare tutte le note della select * senza la clausola where note<>NULL, con una sola query potrei stabilire quali sono i campi facoltativi inutilizzati, e con una nuova query selezionare i dati senza concatenarli? Si può fare una cosa del genere?

  3. #3
    Per verificare se esistono dati in un campo l'uso del NULL non e' il meglio. Conviene che il campo sia NOT NULL e vuoto. La ragione e' che NULL e vuoto sono due cose diverse, acquisibili entrambe solo con una specifica clausola where

    WHERE campo IS NULL OR campo = '';

    <> da NULL significa vuoti e non vuoti.

    Per quando riguarda il trattamento del campo da stampare, con una if vedi se il campo e' vuoto, cosi' lo salti oppure metti l'avviso che il campo e' vuoto.

    while ....

    if($row['campo'] != '' ) stampare
    else non stampare....

    ovviamente il campo deve essere NOT NULL come detto sopra.


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

  4. #4
    Utente di HTML.it L'avatar di james
    Registrato dal
    Jun 2002
    Messaggi
    1,481
    grazie per il consiglio del NULL, ho messo a not null e faccio un controllo sul <>''. Resta comunque il problema di come capire se i campi sono tutti vuoti. Faccio un esempio; l'anagrafica di cui parlavo prima
    Nome Cognome Telefono Note
    Mario Rossi
    Giuseppe Bianchi

    Quando visualizzo questa tabella, non ha senso visualizzare le colonne telefono e note, perchè nessuno dei record ha un valore per essi. Ma nel caso un solo record abbia il telefono, dovrei per forza visualizzare la colonna telefono e scrivere il numero solo al record che ce l'ha, e un messaggio diverso a chi non ce l'ha. Ora come posso scrivere la query che controlla che ci sia almeno un valore <>'' per il campo telefono e per il campo note?

  5. #5
    Utente di HTML.it L'avatar di james
    Registrato dal
    Jun 2002
    Messaggi
    1,481
    ho provato facendo 3 query

    SELECT id FROM anagrafica WHERE telefono<>''
    SELECT id FROM anagrafica WHERE note<>''
    SELECT * FROM anagrafica

    Così faccio 3 query e dalle prime due so se devo visualizzare la colonna corrispondente, ma se i campi facoltativi fossero 10, io dovrei 10+1 query per stabilire quali colonne devo visualizzare e quali posso non visualizzare perchè nessuno ha un valore compilato. E' + chiaro il discorso?

  6. #6
    Se stampi l'agenda hai la possibilita' che nessuno abbia telefono e/o note, solo alcuni oppure tutti. Ti verrebbe pure complicato a gestire il layout della tabella. Direi che e' piu' realistico mettere sempre tutte le colonne interessate e con una if o stampi il contenuto del campo oppure la scritta alternativa. Un esempio:
    codice:
    ciclo while($row = mysql_fetch_assoc....
    {
    echo "<tr><td>$row[nome] $row[cognome]</td>";
    
    if($row['telefono'] != "") { echo "<td>$row[telefono]</td>";  
    }  else { echo "<td>Nessun telefono.</td>";  }
    
    if($row['note'] != "") { echo "<td>$row[note]</td></tr>";  
    }  else { echo "<td>Nessuna nota.</td></tr>";  }
    
    }

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

  7. #7
    Utente di HTML.it L'avatar di james
    Registrato dal
    Jun 2002
    Messaggi
    1,481
    Originariamente inviato da piero.mac
    Se stampi l'agenda hai la possibilita' che nessuno abbia telefono e/o note, solo alcuni oppure tutti. Ti verrebbe pure complicato a gestire il layout della tabella. Direi che e' piu' realistico mettere sempre tutte le colonne interessate e con una if o stampi il contenuto del campo oppure la scritta alternativa. Un esempio:
    codice:
    ciclo while($row = mysql_fetch_assoc....
    {
    echo "<tr><td>$row[nome] $row[cognome]</td>";
    
    if($row['telefono'] != "") { echo "<td>$row[telefono]</td>";  
    }  else { echo "<td>Nessun telefono.</td>";  }
    
    if($row['note'] != "") { echo "<td>$row[note]</td></tr>";  
    }  else { echo "<td>Nessuna nota.</td></tr>";  }
    
    }
    grazie ugualmente del consiglio

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.