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

    doppioni dopo una query

    ciao a tutti

    provo a spiegarmi

    Dopo che eseguo questa query:
    SELECT org.*, ber.*, sos.IDAGENTE, sos.DENOMINAZIONE, lav.*, mat.* FROM m_organi as org, m_orgber as ber, m_sostanze as sos, m_matrice as mat, m_inail as lav WHERE org.idorgano = '.$idorgano.' AND org.idorgano = ber.idorgano AND sos.IDAGENTE = ber.IDAGENTE AND sos.IDAGENTE = mat.IDAGENTE AND mat.codiceinail = lav.codiceinail ORDER BY lav.lavorazione

    stampo i risultati in una tabella a 2 colonne e più righe, in pratica nella prima colonna ho il codiceinail e nella seconda colonna ho l'IDAGENTE

    il problema è che posso avere per uno stesso codiceinail più agenti correlati e nella tabella che stampo questi mi risultano su righe diverse, a me piacerebbe invece che risulti una sola riga per ogni codiceinail e se dovessero esserci più IDAGENTI correlati ad esso che siano nella stessa riga



    grazie

  2. #2
    Non credo che tu possa risolvere il problema tramite una query, l'unica è elaborare il resultset ottenuto.
    La prima cosa che mi viene in mente è una cosa del genere, dopo aver effettuato la select cicli sul resultset e coscruisci un array la cui chiavi saranno i vari "codiceinail" ed il valore gli "idagente" concatenati:

    Codice PHP:
    ...
    $res = Array();
    while (
    $record mysql_fetch_array($result)) {
        if (
    array_key_exists($record['codiceinail'], $res)) {
            
    $res[$record['codiceinail']] .= " ".$record['idagente'];
        } else {
            
    $res[$record['codiceinail']] = $record['idagente'];
        }

    Alla fine l'array $res conterrà per ciascun "codiceinail" differente i vari "idagente" concatenati (se ve ne è più di uno). Quindi scorrendo tale array potrai creare la tabella.

    Con un resultset del tipo:

    codice:
    codiceinail - idagente
    001            Pippo
    002            Pluto
    001            Paperino
    003            Paperoga
    001            Paperone
    002            Paperina
    004            Topolino
    005            Gastone
    otterrai un array:

    codice:
    $res = Array ( [001] => Pippo Paperino Paperone [002] => Pluto Paperina [003] => Paperoga [004] => Topolino [005] => Gastone )
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  3. #3
    ci provo

    vediamo cosa esce

    se ho ancora problemi provo a farmi risentire

    grazie mille

  4. #4
    Io nel mio esempio ho concatenato i vari "idagente" utilizzando un semplice spazio ovviamente nulla ti vieta di utilizzare un carattere delimitatore come ad esempio la virgola (,) in modo da poter eventualmente effettuare un successivo explode() e recuperare i singoli valori.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  5. #5
    Come output dovrei fare una cosa del genere:


  6. #6
    Codice PHP:
    <?php
    ...
    $res = Array();
    while (
    $record mysql_fetch_array($result)) {
        if (
    array_key_exists($record['codiceinail'], $res)) {
            
    $res[$record['codiceinail']] .= "
    - "
    .$record['idagente'];
        } else {
            
    $res[$record['codiceinail']] = "- ".$record['idagente'];
        }
    }
    echo 
    "<table border='1' cellpadding='10'>";
        foreach (
    $res as $key => $value) {
            echo 
    "<tr><td>codiceinail $key</td><td>$value</td></tr>";
        }
    echo 
    "</table>";         
    ?>
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  7. #7
    we grandissimo
    alla fine sono riuscito grazie al tuo esempio!

    Solo una cosa per migliorare ulteriormente la visualizzazione...purtroppo non riesco a farla:

    in pratica dalla query io tiro fuori anche la descrizione relativa al codice inail (tipaz) e quindi vorrei inserirla nella stessa casella del codice inail ma a capo come da immagine esempio:




    grazie per l'immenso aiuto

  8. #8
    Prova così anche se mi piace poco come soluzione perchè si interviene sulle chiavi dell'array ed il corretto funzionamento presume che codici inail uguali abbiano uguale descrizione.

    Codice PHP:
    <?php
    ...
    $res = Array();
    while (
    $record mysql_fetch_array($result)) {
        if (
    array_key_exists($record['codiceinail']."
    "
    .$record['tipaz'], $res)) {
            
    $res[$record['codiceinail']."
    "
    .$record['tipaz']] .= "
    - "
    .$record['idagente'];
        } else {
            
    $res[$record['codiceinail']."
    "
    .$record['tipaz']] = "- ".$record['idagente'];
        }
    }
    echo 
    "<table border='1' cellpadding='10'>";
        foreach (
    $res as $key => $value) {
            echo 
    "<tr><td>codiceinail $key</td><td>$value</td></tr>";
        }
    echo 
    "</table>";         
    ?>
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  9. #9
    si funziona grazie mille

    sei stato gentilissimo! 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.