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

    [MYSQL] elimina campi vuoti in CONCAT_WS

    Ciao
    Ho un problemino, diciamo, di tipo estetico con la funzione CONCAT_WS.
    Ho questa query:
    Codice PHP:
    $Query "SELECT agenda.id, nominativo, indirizzo, citta, CONCAT_WS(', ',tel_casa, tel_uff, cellulare) AS Telefono
            FROM agenda 
            INNER JOIN agenda_print 
            ON agenda.id = agenda_print.id_agenda 
            WHERE MD5(agenda_print.ip) = '" 
    $ip "'"
    La query funziona e mi concatena i tre campi telefonici. Ma se un campo è vuoto, ovviamente, me lo carica ugualmente creando dei vuoti ed ottenendo una stampa del genere:
    codice:
    Pinco Pallino 		Vattelapesca	 , , 456/12584785
    Giulio Cesare 		Roma		 123/12345687, 0548/1234587,
    Alessandro Manzoni 	Milano		 321/45678958, , 789/6549871
    Quel che chiedo è se è possibile eliminare i campi vuoti in modo da non ottenere quegli spazi vuoti?
    Oppure debbo risolvere il problema in PHP rinunciando a questo tipo di query?

    Grazie

  2. #2
    puoi sempre riempire i campi vuoti (sono dei varchar) con un default. Per esempio un 'No' oppure 000/000000

    se hai una tabella html in output dovrai mantere un allineamento per il tipo di telefono, almeno credo.

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

  3. #3
    ciao piero.mac, grazie per la risposta.
    Al valore predefinito ci avevo pensato anch'io, ma l'ho scartato perchè in output farebbe confusione una cosa del genere:
    45/4587985, NO, 125/7895847
    NO, NO, 45/7894857

    oppure
    45/4587985, 000/000000, 125/7895847
    000/000000, 000/000000, 45/7894857

    mi piacerebbe più una cosa del genere
    45/4587985, 125/7895847
    45/7894857

    Per l'uotput html uso già una tabella simile alla tabella MYSQL coi campi separati e per quella non ho problemi.
    Ma in questa seconda tabella di riepilogo ( NOME - TEL ) unirei tutti i numeri in unico campo come ho indicato nel terzo esempio.
    Per far questo ho provato, cambiando la Query, una soluzione PHP:
    per il telefono creo una matrice dove memorizzo solo i numeri significativi, poi con implode (", ", $telefono) ottengo l'output che desidero.
    Se non è possibile usare CONCAT_WS posso rimanere con la soluzione PHP

    Comunque grazie lo stesso e alla prossima

  4. #4
    prova magari a settare il campo come NULL lasciando appunto come NULL i campi vuoti (empty).

    Mi pare che concat_ws ignori i campi NULL

    Ovviamente dovrai aggiornare i campi vuoti a NULL empty e' diverso da NULL. Ma questo gia' lo sai.

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

  5. #5
    Grazie piero.mac,
    ci proverò, ma visto che la tabella è piena dovrò agire con cautela e poi fare delle prove.

  6. #6
    Originariamente inviato da micdas
    Grazie piero.mac,
    ci proverò, ma visto che la tabella è piena dovrò agire con cautela e poi fare delle prove.
    personalmente prima di fare danni faccio sempre una copia della tabella e provo sulla copia. costa poco e rende tanto.

    Ciao.

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

  7. #7
    Originariamente inviato da piero.mac
    personalmente prima di fare danni faccio sempre una copia della tabella e provo sulla copia. costa poco e rende tanto.

    Ciao.
    Infatti è quel che sto facendo.
    Fatta la copia
    modificato i 3 campi assegnando NULL come valore predefinito
    modifica a mano di tutti i record facendogli prendere il valore null dove il campo è vuoto
    Fortuna che ultimamente ho scoperto due query per duplicare e copiare velocemente i dati

  8. #8
    Ciao piero.mac
    Dunque, a beneficio di chi abbia lo stesso problema:
    ho settato a NULL tutti i campi vuoti del telefono ed ho lanciato questa query:
    Codice PHP:
    $Query "SELECT agenda.id, nominativo, indirizzo, citta, CONCAT_WS(', ',tel_casa, tel_uff, cellulare) AS Telefono
            FROM agenda 
            INNER JOIN agenda_print 
            ON agenda.id = agenda_print.id_agenda 
            WHERE MD5(agenda_print.ip) = '" 
    $ip "'
            ORDER BY gruppo"

    Debbo dire che, coi valori NULL nei campi vuoti, il risultato è quello atteso, i NULL non vengono presi.

    Grazie

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.