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

    Estrarre in un array tutte le righe dell'array mysql_fetch_array che abbiano 1det val

    Buonasera a tutti,
    volevo chiedervi un aiuto per risolvere un problema; nella descrizione semplificherò al massimo per arrivare al succo della questione:
    1) ho una tabella nel db che si chiama "ciao";
    2) in questa tabella ci sono 4 colonne: il classico "id", "nome", "cognome", "gruppo";
    3) l'importante è il campo "gruppo": in quel campo ci va un valore che può essere A, B oppure C, a seconda di quale gruppo ciascun utente appartiene;
    es.

    codice:
    | id | nome   | cognome | gruppo |
    --------------------------------
    | 1  | Marco |   Rossi     |    A      |
    | 2  | Luca   |   Bianchi   |    B     |
    | 3  | Matteo|   Verdi     |    C     |
    | 4  | Marco |   Bello      |    B      |
    | 5  | Serse |   Scuro     |    A      |
    | 6  | Pietro |   Pinci       |   C      |
    | 7  | Lory   |   Astfa      |   B      |
    | 8  | Giorgio|   Pigu       |    A     |
    Bene, in una pagina estraggo tutti i dati:
    Codice PHP:
    $query "SELECT * FROM ciao";
    $result mysql_query($query)
              or die(
    mysql_error()); 
    e ficco il tutto in un array:
    Codice PHP:
    $row mysql_fetch_array($result
    Fin qui tutto ok.
    Problema: io voglio estrarre (con un ciclo? Quale?) dall'array $row tutte le righe che hanno come "gruppo" il gruppo A, così da poterle mettere in una tabella del gruppo A; lo stesso voglio che venga fatto in sequenza anche per quelle righe del gruppo B e quelle del gruppo C.
    Per meglio chiarirmi il risultato che voglio è ottenibile con 3 query diverse, cioè:

    Codice PHP:
    <?php
    /* Estraggo solo gli utenti del GRUPPO A */
    $query1 "SELECT * FROM ciao WHERE gruppo='A'";
    $result1 mysql_query($query)
                  or die(
    mysql_error());  
    ?>

    <table>
    <caption> Gruppo A </caption>
    <thead> <th>Nome</th>
                 <th>Cognome</th>
                 <th>Gruppo</th>
    </thead>
         
    <?php
    while($row mysql_fetch_array($result1))
      {  echo 
    "<tbody> <td>" .$row['nome']. "</td>
                               <td>" 
    .$row['cognome']. "</td>
                               <td>" 
    .$row['gruppo']. "cent</td>
                  </tbody>"
    ; }


    /* Estraggo solo gli utenti del GRUPPO B */
    $query2 "SELECT * FROM ciao WHERE gruppo='B'";
    $result2 mysql_query($query)
                  or die(
    mysql_error());  
    ?>

    <table>
    <caption> Gruppo B </caption>
    <thead> <th>Nome</th>
                 <th>Cognome</th>
                 <th>Gruppo</th>
    </thead>
         
    <?php
    while($row mysql_fetch_array($result2))
      {  echo 
    "<tbody> <td>" .$row['nome']. "</td>
                               <td>" 
    .$row['cognome']. "</td>
                               <td>" 
    .$row['gruppo']. "cent</td>
                  </tbody>"
    ; }


    /* Estraggo solo gli utenti del GRUPPO C */
    $query3 "SELECT * FROM ciao WHERE gruppo='C'";
    $result3 mysql_query($query)
                  or die(
    mysql_error());  
    ?>

    <table>
    <caption> Gruppo C </caption>
    <thead> <th>Nome</th>
                 <th>Cognome</th>
                 <th>Gruppo</th>
    </thead>
         
    <?php
    while($row mysql_fetch_array($result3))
      {  echo 
    "<tbody> <td>" .$row['nome']. "</td>
                               <td>" 
    .$row['cognome']. "</td>
                               <td>" 
    .$row['gruppo']. "cent</td>
                  </tbody>"
    ; }
    ?>
    Visto che mi sembra inutile fare 3 query diverse, vorrei fare una query sola dove estraggo tutti i dati nell'array mysql_fetch_array, e da lì poi dico:
    "per tutte quelle righe che hanno come valore del campo "gruppo" A => crea un array $gruppoA=array(tutte le righe di quelli del gruppo A).
    "per tutte quelle righe che hanno come valore del campo "gruppo" B => crea un array $gruppoB=array(tutte le righe di quelli del gruppo B).
    "per tutte quelle righe che hanno come valore del campo "gruppo" C => crea un array $gruppoC=array(tutte le righe di quelli del gruppo C)."

    Spero di essermi spiegato e di non essere stato confusionario.
    Grazie a tutti in anticipo!

  2. #2
    fai per favore un print_r dell'array che ti costruisci e postalo

  3. #3
    Questo è il print_r dell'array $row

    Codice PHP:
    Array ( [0] => [id] => [1] => Marco [nome] => Marco [2] => Rossi [cognome] => Rossi [3] => [gruppo] => 
    In pratica io vorrei (se possibile) indirizzare all'array mysql_fetch_array un comando identico a quello che darei in una query verso il db;
    verso il db farei una query del tipo:
    Codice PHP:
    $query "SELECT * FROM ciao WHERE gruppo='A'" 
    qui invece io voglio estrarre TUTTO il contenuto della tabella dal db e rivolgere poi all'array mysql_fetch_array una query del tipo (esempio volgare, ma per rendere l'idea):
    Codice PHP:
    $gruppoA "SELECT * FROM mysql_fetch_array WHERE gruppo='A'" 

  4. #4

    Re: Estrarre in un array tutte le righe dell'array mysql_fetch_array che abbiano 1det val

    Originariamente inviato da REGISTRAMI
    ...

    Problema: io voglio estrarre (con un ciclo? Quale?) dall'array $row tutte le righe che hanno come "gruppo" il gruppo A, così da poterle mettere in una tabella del gruppo A; lo stesso voglio che venga fatto in sequenza anche per quelle righe del gruppo B e quelle del gruppo C.
    Per meglio chiarirmi il risultato che voglio è ottenibile con 3 query diverse, cioè:

    Codice PHP:
    <?php
    /* Estraggo solo gli utenti del GRUPPO A */
    $query1 "SELECT * FROM ciao WHERE gruppo='A'";
    $result1 mysql_query($query)
                  or die(
    mysql_error());  
    ?>

    <table>
    <caption> Gruppo A </caption>
    <thead> <th>Nome</th>
                 <th>Cognome</th>
                 <th>Gruppo</th>
    </thead>
         
    <?php
    while($row mysql_fetch_array($result1))
      {  echo 
    "<tbody> <td>" .$row['nome']. "</td>
                               <td>" 
    .$row['cognome']. "</td>
                               <td>" 
    .$row['gruppo']. "cent</td>
                  </tbody>"
    ; }


    /* Estraggo solo gli utenti del GRUPPO B */
    $query2 "SELECT * FROM ciao WHERE gruppo='B'";
    $result2 mysql_query($query)
                  or die(
    mysql_error());  
    ?>

    <table>
    <caption> Gruppo B </caption>
    <thead> <th>Nome</th>
                 <th>Cognome</th>
                 <th>Gruppo</th>
    </thead>
         
    <?php
    while($row mysql_fetch_array($result2))
      {  echo 
    "<tbody> <td>" .$row['nome']. "</td>
                               <td>" 
    .$row['cognome']. "</td>
                               <td>" 
    .$row['gruppo']. "cent</td>
                  </tbody>"
    ; }


    /* Estraggo solo gli utenti del GRUPPO C */
    $query3 "SELECT * FROM ciao WHERE gruppo='C'";
    $result3 mysql_query($query)
                  or die(
    mysql_error());  
    ?>

    <table>
    <caption> Gruppo C </caption>
    <thead> <th>Nome</th>
                 <th>Cognome</th>
                 <th>Gruppo</th>
    </thead>
         
    <?php
    while($row mysql_fetch_array($result3))
      {  echo 
    "<tbody> <td>" .$row['nome']. "</td>
                               <td>" 
    .$row['cognome']. "</td>
                               <td>" 
    .$row['gruppo']. "cent</td>
                  </tbody>"
    ; }
    ?>
    Visto che mi sembra inutile fare 3 query diverse, vorrei fare una query sola dove estraggo tutti i dati nell'array mysql_fetch_array, e da lì poi dico:
    "per tutte quelle righe che hanno come valore del campo "gruppo" A => crea un array $gruppoA=array(tutte le righe di quelli del gruppo A).
    "per tutte quelle righe che hanno come valore del campo "gruppo" B => crea un array $gruppoB=array(tutte le righe di quelli del gruppo B).
    "per tutte quelle righe che hanno come valore del campo "gruppo" C => crea un array $gruppoC=array(tutte le righe di quelli del gruppo C)."

    Spero di essermi spiegato e di non essere stato confusionario.
    Grazie a tutti in anticipo!
    Potresti generalizzare la tua soluzione, in questo modo:
    - ottieni tutti i gruppi nella tabella (mediante una query con clausola distinct);
    - per ogni gruppo nel result set
    - esegui una select per ottenere le righe che annoverano l'i-esimo gruppo
    - visualizzi i dati nel result set

  5. #5
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    Il problema è presto risolto:

    Codice PHP:
    <?php

    $sql 
    "SELECT * FROM ciao ORDER BY gruppo, cognome, nome";
    $res mysql_query($sql) or die(mysql_error()); 
    $gruppo_attuale=''
    $num_tabella=0;

    while(
    $row=mysql_fetch_array($res)){
        If(
    $gruppo_attuale!=$row['gruppo']){//Sto per iniziare un nuovo gruppo
            
    if($num_tabella){//Se non è la prima tabella devo chiudere la precedente
                
    echo<<<EOT
                        </tbody>
                    </table>
    EOT;
            }
            
    //Avvio la nuova tabella
            
    echo <<<EOT
                <table>
                    <caption> 
    {$row['gruppo']} </caption>
                    <thead> 
                        <th>Nome</th>
                        <th>Cognome</th>            
                    </thead> 
                    <tbody>
    EOT;
            
    $gruppo_attuale=$row['gruppo'];//Opportuno settaggio di variabili
            
    $num_tabella++;
        }
        
        
    //Visualizzazione dei dati della tabella
        
    echo<<<EOT
            <td>{$row['cognome']}</td><td>{$row['nome']}</td>
    EOT;
    }

    if(
    $num_tabella){//Devo chiudere l'ultima tabella se ne è stata creata lameno una
                
    echo<<<EOT
                        </tbody>
                    </table>
    EOT;
    }

    ?>
    Siamo sempre troppo gelosi delle nostre grandi piccole opere! - Grino inedito.
    Lavori e Lavoretti

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.