Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [MySql]I conti non tornano

    Buon pomeriggio ho una tabella di 1542 record, composta da utenti registrati.
    Praticamente dovrei eseguire 4 tipi di ricerche ossia, trovare quelli con:
    1) senza recapiti telefonici
    2) con il recapito del telefono fisso
    3) con recapito da cellulare
    4) con tutti e due i recapiti.

    Ora eseguendo queste 4 query distinte:
    codice:
    /*senza recapiti telefonici->totale record 162*/
    select * from TBUTENTI where abilita <> 0
    and (Telefono = '' and Cellulare = '') order by IdUser asc
    
    
    /*con due recapiti telefonici->totale record 379*/
    select * from TBUTENTI where abilita <> 0
    and (Telefono <> '' and Cellulare <> '') order by IdUser asc
    
    /*con solo recapito telefono fisso->totale record 115*/
    select * from TBUTENTI where abilita <> 0
    and (Telefono <> '' and Cellulare = '') order by IdUser asc
    
    /*con solo recapito cellulare->totale record 206*/
    select * from TBUTENTI where abilita <> 0
    and (Telefono = '' and Cellulare <> '') order by IdUser asc
    Devo eseguire una query alla volta, soltanto che mancano all'appello 680 record.
    Cosa dimentico?Sbaglio qualcosa?
    grazie in anticipo
    buona serata

  2. #2
    qualche valore NULL?
    Ciao!

  3. #3
    Sarebbe meglio vedere la struttura della tabella ....

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

  4. #4
    allora eseguendo queste due select:
    codice:
    /*680 non hanno nessun recapito telefonico*/
    select * from TBUTENTI where abilita <> 0
    and (Telefono is null || cellulare is null) order by IdUser asc
    
    /*864 solo telefono fisso, solo cellulare, entrambi e stringa vuota*/
    select * from TBUTENTI where abilita <> 0
    and (Telefono is not null || cellulare is not null) order by IdUser asc
    Cosi avrei tutti i record, ma ho notato una cosa.
    Nella prima select 680 non hanno nessun recapito e cosi è giusto.
    Nella seconda tra gli 864 ce ne sono alcuni che non hanno nessun recapito.

    Potreste spiegarmi cortesemente come mai, negli 864 ce ne sono alcuni senza nessun recapito?
    Grazie ancora

  5. #5
    allooooora ripeto:

    vediamo la struttura della tabella. NULL o NOT NULL, default o numerico o chicazzlosa'....

    NULL e' diverso da empty, zero e' diverso da empty, NULL puo' diventare empty ... quindi per capire qualcosa in piu' senza sparare a caso, serve la struttura della tabella.

    Altrimenti spariamo nel mucchio.

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

  6. #6
    forse come ho fatto adesso è corretto.
    codice:
    /*702->SOLO FISSO, SOLO CELLULARE, ENTRAMBI*/
    select from TBUTENTI where abilita <> 0
    and (Telefono is not null || cellulare is not null) 
    and (Telefono <> '' || cellulare <> '')order by IdUser asc
    in questo modo escludo il valore stringa vuota.


    codice:
    /*680 hanno valore null in entrambi i casi*/
    select * from TBUTENTI where abilita <> 0
    AND (Telefono is null and cellulare is null) order by IdUser asc
    
    /*162 sono stringa vuota*/
    select * from TBUTENTI where abilita <> 0
    AND (Telefono = '' and cellulare = '') order by IdUser asc
    eseguendo queste 3 select dovrei aver risolto.ma attendo sempre lumi da voi che ne sapete più di me.
    grazie mille

  7. #7
    eccola... scusami
    codice:
    TBUTENTI (
      IdUser int(10) unsigned NOT NULL auto_increment,
      UserName varchar(15) NOT NULL DEFAULT '' ,
      Pwd varchar(40) ,
      UserType varchar(10) ,
      Cognome varchar(20) ,
      Nome varchar(20) ,
      dRegistrazione datetime ,
      Mail varchar(60) ,
      Telefono varchar(10) ,
      cellulare varchar(10) ,
      bStatus smallint(6) ,
      dModifica datetime ,
      abilita tinyint(1) NOT NULL DEFAULT '0' ,
      PRIMARY KEY (IdUser)
    );

  8. #8
    Ho capito che la struttura della tabella e' un segreto.

    Allora precisiamo sparando a caso.

    Se tu prevedi di utilizzare le colonne telefono e cellulare allora queste non devono essere mai NULL ma NOT NULL con un default tipo 0 oppure ''. Il NULL potrebbe servirti se tu facessi statistiche o altro dove NON deve essere considerato il record NULL.

    La ricerca la farai con 0 o > 0 se il campo e' numerico oppure con campo = '' oppure != '' se varchar.

    va bene usare <> anche sulle stringhe ma mi pare piu' adatto a valori numerici. il campo abilita si suppone sia un si/no ed anche qui metti quello che cerchi e non un <> 0


    @@@edit Va beh! ... hai messo la tabella ho visto ora, ma le cose non cambiano. ho sparato i miei due soldi di morfina. ora fai come ti pare....

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

  9. #9
    meglio precisare:

    NULL - EMPTY - VALORIZZATO

    sono 3 stati da gestire in modo autonomo. Perche' 3 se ne puoi avere solo 2 e cioe' EMPTY e VALORIZZATO???

    10 caratteri per i numerici telefonici sono pochi se si aggiunge anche il prefisso della nazione.

    Nella tabella che hai postato non vedo nessun campo che abbia una qualche ragione di essere NULL e i campi abilita e bStatus li farei ENUM

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

  10. #10
    grazie piero dei tuoi utili consigli
    sempre molto gentile

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.