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

    Problema con l'utilizzo di due tabelle

    Salve a tutti.
    Ho due tabelle: una deniminata entrare e l'altra reti.
    Eccole qua:


    TABELLA RETI
    ID|Tipo|Filato|mmsq |quant|
    1 | a | 0,15 |17,86|212 |
    2 | a | 0,15 |19,28|222 |

    ENTRATE
    ID|Rete| - Data - |num_fatt |pz |
    1 | 1 |16-12-2003|16-12-2003|100|
    2 | 2 |16-12-2003|16-12-2003|0 |
    ........
    ........
    94| 1 |13-07-2003|13-07-2003|0 |
    95| 2 |13-07-2003|13-07-2003|0 |


    La tabella Reti mi elenca tutto il cià che è presente in deposito. La tabella entrate invece elenca tutte le

    entrate delle reti.
    La colonna "Rete" presente nella tabella entrate corrisponde al numero ID della Rete presente nella tabella Reti.
    Come potete vedere nella tabella entrate le Reti "1" e "2" sono presenti due volte.

    Io ho creato questo script che mi elenca tutte le voci presente nella tabella RETi.
    Codice PHP:
    $sql1 "SELECT * FROM 

    $tabella WHERE Tipo = 'a'";

    $risultato1 = @mysql_query($sql1,$connessione)
            or die(
    "$err3");

    $visualizza "";

                
    while (
    $riga mysql_fetch_array($risultato1)) 
    {

    $ID $riga['ID'];
    $Filato $riga['Filato'];
    $Tipo $riga['Tipo'];
    $mmsq $riga['mmsq'];
    $quant $riga['quant'];

            if (
    $quant <= 0) {
              
    $quant2 "<font color=\"red\">[b]$quant[/b]</font>";
                } else {
              
    $quant2 "$quant";
               }

    $altnumber_format($alt12'.',''); 

            
    $ret_mon .= 
               <tr>
                 <td>Ø 
    $Filato</td>
                 <td>
    $mmsq</td>
                 <td align=\"right\">
    $quant2</td>
               </tr>"
    ;


    Ora ne vorrei creare uno che mi elenchi, come quello che ho fatto io, i campi presenti nella tabella Reti, ma

    mi visualizzi anche il numero delle reti presenti nelle date insrite nella tabella entrate. Alla fine nella pagina

    vorrei visualizzare questo:
    Codice PHP:
    <table>
      <
    tr>
        <
    td>Filato</td>
        <
    td>MMSQ</td>
        <
    td>Quantità</td>
        <
    td>Quant16-12-2003</td>
        <
    td>Quant13-07-2003</td>
      </
    tr>
      <
    tr>
        <
    td>0,15</td>
        <
    td>17,86</td>
        <
    td>212</td>
        <
    td>100</td>
        <
    td>0</td>
      </
    tr>
      <
    tr>
        <
    td>0,15</td>
        <
    td>19,28</td>
        <
    td>222</td>
        <
    td>0</td>
        <
    td>0</td>
      </
    tr>
    </
    table
    Ho cercato in tutti i modi ma sono ormai a corto di idee.

    Spero in un vostro aiuto

    Paolo

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2003
    Messaggi
    555
    Fai una ricerca con join. Trovi degli esempi di sql su + tabelle.

  3. #3
    Ciao, avevo già provato ciò che mi dici da tempo.
    creai questo script:
    Codice PHP:
    $sql_reti "SELECT reti.Filato, reti.maglia, entrate.pz, reti.ID AS ID1, entrate.ID AS ID2 FROM reti LEFT JOIN entrate ON entrate.Rete = reti.ID WHERE reti.Tipo = 'a'";

    $risultato_reti = @mysql_query($sql_reti,$connessione)
            or die(
    "$err3");

    $visualizza "";
                
    while (
    $riga mysql_fetch_array($risultato_reti)) 
    {

    $ID1 $riga['ID1'];
    $ID2 $riga['ID2'];
    $Filato $riga['Filato'];
    $maglia $riga['maglia'];
    $pz $riga['pz'];

    $ret_mon .= "$Filato - $maglia - $ID1 - $ID2 - $pz
    "
    ;

    }
    echo 
    "$ret_mon"
    Purtroppo il risultato è questo:
    codice:
    0,15 - 15 - 1 - 1 - 100
    0,15 - 15 - 1 - 94 - 0
    0,15 - 15 - 1 - 187 - 0
    0,15 - 15 - 1 - 280 - 0
    0,15 - 15 - 1 - 373 - 0
    0,15 - 15 - 1 - 466 - 0
    0,15 - 14 - 2 - 2 - 0
    0,15 - 14 - 2 - 95 - 0
    0,15 - 14 - 2 - 188 - 0
    0,15 - 14 - 2 - 281 - 0
    0,15 - 14 - 2 - 374 - 0
    0,15 - 14 - 2 - 467 - 0
    Mentre io volevo un risultato simile:
    codice:
    0,15 - 15 - 1 - 1 - 100 - 0 - 0 - 0 - 0 - 0
    0,15 - 14 - 2 - 2 - 0 - 0 - 0 - 0 - 0 - 0
    Deve raggruppare le voci con la descrizione simile.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2003
    Messaggi
    555
    $sql_reti = "SELECT reti.Filato, reti.maglia, entrate.pz, reti.ID AS ID1, entrate.ID AS ID2 FROM reti LEFT JOIN entrate ON entrate.Rete = reti.ID WHERE reti.Tipo = 'a' GROUP BY nomecampo"

    Nella clausola group by devi indicare il nome del campo interessato.
    Non ricordo se anche nella select ci deve essere lo stesso campo.

    prova

  5. #5
    Mi pare che non sia un problema di query, ma di formattazione del result set ottenuto. Si tratta di record diversi che devi allineare in una sola linea. Non potrai mai ottenere un result set gia' formattato a quel modo.

    in pratica devi usare una if (esempio parlato...)...

    while .... {

    if ($id, $tipo, $filato == a id, tipo, filato appena estratto )
    allora stampa solo <td>"quantita" </td>

    else stampa tutto </tr><tr><td> dati

    $id = id estratto;
    $tipo = idem;
    $filato = idem;
    } // fine while




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

  6. #6
    Scusami Piero ma non riesco proprio ad applicare la formula che mi dici.


    Codice PHP:
    while ($riga mysql_fetch_array($risultato_reti))  


    $ID1 $riga['ID1']; 
    $ID2 $riga['ID2']; 
    $Filato $riga['Filato']; 
    $maglia $riga['maglia']; 
    $pz $riga['pz']; 

        if (
    "$id $tipo $filato== "$id $tipo $filato") {
          
    $aa "<td align=\"center\">$pz</td>";
        }

    $ret_mon .= "
    <tr>
     <td align=\"center\">
    $Filato</td>
     <td align=\"center\">
    $maglia</td>
      
    $aa
     </tr>"
    ;



    echo 
    "
    <table width=\"76%\" border=\"1\" cellspacing cellpadding>
     <tr>
       <td align=\"center\">[b]Filato[/b]</td>
       <td align=\"center\">[b]MM.[/b]</td>
       <td align=\"center\">pz</td>
       <td align=\"center\">pz</td>
       <td align=\"center\">pz</td>
       <td align=\"center\">pz</td>
       <td align=\"center\">pz</td>
       <td align=\"center\">pz</td>
     </tr>
    $ret_mon
    </table>"

    Sono consapevole di aver scritto tutto sbagliato, infatti questo script non ha molto senso (funziona si, ma non come dovrebbe).
    Devi scusarmi, però dovresti darmi un'altra mano.

    Paolo

  7. #7
    Non ha senso no... l'esempio era "parlato". Quindi va tradotto in codice. Non conosco i nomi che utilizzi e nemmeno voglio saperli. Quindi semplifico
    codice:
    $var1 = '';
    $var2 = '';
    $varnn = '';
    while ($riga = mysql_fetch_array($risultato_reti))   
    
    if($var1 == $riga['var1'] AND $var2 == $riga['var2'] AND $varnn == $riga['varnn'] ) {
    // significa che i dati sono uguali, quindi accodi solo la quantita'
    echo pezzi.
    } else { significa che sono diversi e va stampato tutto il record.
    }
    
    $var1 = $riga['var1'];
    $var2 = $riga['var2'];
    $varnn = $riga['varnn'];
    Il concetto del controllo e' quello. Il layout della tabella o form che stampi non puo' riguardarmi.

    Riassumendo... tu hai dei record. Questi record possono avere dei campi identici che sai tu e che non devono essere ripetuti nella stampa. Quindi estrai il result set. Se i dati che non devono essere ripetuti sono uguali stampi solo il dato che serve... altrimenti stampi la riga intera...

    Quando inizi le $var1, $var2, $varnn sono vuote, quindi stampera' sicuramente tutta la riga. Prima di terminare il ciclo while aggiorni il valore dei $var*. Riprendendo il ciclo ora confronti il valore precedente con il nuovo e via cosi'....


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

  8. #8
    Ciao Piero, ho cercato di seguire le tue istruzioni, il risultato è questo:
    Codice PHP:
    echo "
    <table width=\"76%\" border=\"1\" cellspacing cellpadding>
     <tr>
       <td align=\"center\">[b]Filato[/b]</td>
       <td align=\"center\">[b]MM.[/b]</td>
       <td align=\"center\">pz</td>
       <td align=\"center\">pz</td>
       <td align=\"center\">pz</td>
       <td align=\"center\">pz</td>
       <td align=\"center\">pz</td>
       <td align=\"center\">pz</td>
     </tr>"
    ;

    $ID1 '';
    $ID2 '';
    $Filato '';
    $maglia '';
    $pz '';

    while (
    $riga mysql_fetch_array($risultato_reti)) 
    {
        if(
    $Filato == $riga['Filato'] AND $maglia == $riga['maglia']) {
            
    $aaa "<td><$pz></td>";
        } else { 
            
    $aaa "<tr>
               <td>
    $Filato</td>
                <td>
    $maglia</td>
               <td>
    $pz</td>
                </tr>"
    ;
        }

    $ID1 $riga['ID1'];
    $ID2 $riga['ID2'];
    $Filato $riga['Filato'];
    $maglia $riga['maglia'];
    $pz $riga['pz'];

    echo 
    $aaa;


    echo 
    "</table>
    "

    ancora, con mia grossa delusione, devo ammettere di avere sbagliato ancora
    In cosa sbaglio?

  9. #9
    devi confrontare solo le due variabili che utilizzi. Le altre le devi stampare come estratte dalla query result....
    codice:
    $Filato = ''; 
    $maglia = ''; 
    
    while ($riga = mysql_fetch_array($risultato_reti))  
    { 
        if($Filato == $riga['Filato'] AND $maglia == $riga['maglia']) { 
            $aaa = "<td>$rig['pz']</td>"; 
        } else {  
               $aaa = "<tr> 
                       <td>$riga['Filato']</td> 
                       <td>$riga['maglia']</td> 
                       <td>$riga['pz']</td> 
                       </tr>"; 
                } 
    
    $Filato = $riga['Filato']; 
    $maglia = $riga['maglia']; 
    
    echo $aaa; 
    
    }
    qualcosa di simile....

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

  10. #10
    Utente di HTML.it
    Registrato dal
    Jul 2003
    Messaggi
    555
    Io non avevo proprio capito il problema.

    Scusate :rollo:

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.