• User

    Estrarre correttamente dati con query (GROUP_CONCAT)

    Ciao a tutti.
    Col seguente codice ottengo questo risultato:

    
    **Categoria:** Nintendo DSi **Sottocategora:** Accessori **Descrizione:** 3 penni vari dsi,alimentatore dsi,caricatore auto DSi bianco,console DSi nuovo colore BIANCO,console DSi nuovo colore BIANCO,console DSi nuovo colore BIANCO,console DSi nuovo colore BIANCO
    
    ```E cioé il risultato di **Descrizione** (che è quello che mi interessa), me lo inserisce nel db tutto in una riga come fosse una sola frase.
    Come posso fare ad inserire tutti i dati della **Descrizione** uno per uno in una tabella db ottenendo ad es.:
    id|Descrizione
    1|3 penni vari dsi
    2|alimentatore dsi
    3|caricatore auto DSi bianco
    4|console DSi nuovo colore BIANCO
    e via discorrendo?
    
    Questo il codice (magari non giusto per la mia esigenza), che utilizzo.
    

    $query=("SELECT Category,Subcategory,GROUP_CONCAT(Description) as descrizione
    FROM test GROUP BY Category,Subcategory ORDER BY Category,Subcategory DESC")
    or die(mysql_error());

    $result=mysql_query($query);
    while ($row = mysql_fetch_array($result)) {

    echo "<b>Categoria:</b> ".$row['Category']. " ";
    echo "<b>Sottocategora:</b> " .$row['Subcategory']. " ";
    echo "<b>Descrizione:</b> " .$row['descrizione']. "<br>";

    }


  • User Attivo

    Utilizzza la funzione explode();

    [php]
    $sub_desc = explode(",", $row['descrizione']);

    for($i = 0; $i < count($sub_desc); $i++)
    {
    echo ($i + 1) . " | " . $sub_desc*;
    }
    [/php]

    Ciao!


  • User

    Ciao e grazie per avermi risposto.
    L'ho provato immediatamente ma il risultato che ottengo è soltanto una serie di numeri cosi come di seguito:
    1 | 2 | 3 | 4 | 5 | 6 | 7 |

    A me servirebbe il testo e non i numeri degli id, quelli li ho messi per fare un esempio.
    Tra l'altro i risultati sono superiori al numero di record.
    Nel db/test che sto utilizzando io ho solo 4 record ma lo script ne tira fuori 7.


  • User Attivo

    Ho tralasciato un $ 😄

    echo ($i + 1) . " | " . $sub_desc* . "<br>";

    Strano che non abbia avvisato dell'errore, comunque questo serve per prendere l'intero contenuto del campo "descrizione", lo divide in token in base ad una regola, in questo caso ogni token è separato da virgola.


  • User

    Grande! Credo che sia la soluzione giusta e che possa servirmi anche per altri campi. Quindi se io volessi mostrare diciamo l'id come l'esempio sopra e successivamente anche la descrizione dovrei fare una cosa tipo:
    echo ($i + 1) . " | " . $sub_desc* . $sub_desc[1];?
    Sbaglio?
    Mi indicheresti anche come estrarre altri dati dal db alla stessa maniera della descrizione?

    Cioé vorrei estrarre descrizione, peso, costo.
    Si può fare?


  • User Attivo

    La funzione explode() nell'esempio, permette di prendere l'intera stringa del campo "descrizione" e suddividerla in tanti "pezzi" quante sono le virgole presenti nel testo.
    Se anche gli altri campi, come il prezzo, contengono valori separati da virgola o da altri caratteri speciali di separazione, puoi utilizzare la stessa funzione.
    Per esempio se hai:

    PREZZO: 10,100,50
    DESCRIZIONE: penne dsi,console dsi,alimentatore dsi

    E ogni prezzo è associato alla descrizione giusta, puoi fare in questo modo:

    [php]
    $sub_descrizione = explode(",", $row['descrizione']);
    $sub_prezzo = explode(",", $row['prezzo']);

    for($i = 0; $i < count($sub_desc); $i++)
    {
    echo "Pezzo: " . $sub_descrizione* . " - Prezzo: " . $sub_prezzo* . "<br>";
    }
    [/php]


  • User

    Grazie Sups, con le tue indicazioni sono riuscito a fare un sacco di cose in più perché ho fatto un po' di "compiti".
    Pensavo però di riuscire a finire con questi tuoi consigli ma man mano che vado avanti scopro nuovi problemi.
    Non ricordo se lo avevo già detto ma sto lavorando alla creazione di un modulo per oscommerce e sto cercando di fare tutto senza mettere mano al db originale. Ce ne hanno messa di volontà per fare impazzire la gente quelli di oscommerce.
    Cercherò di riuscirci ma è davvero complicatissimo e non escludo di dover ri-chiedere aiuto a voi più esperti.
    Per il momento grazie infinite