Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 14 su 14

Discussione: Php che scrive XML

  1. #11
    Grazie Gianluca
    Esattamente la struttura da te mostrata devo ottenere.
    Credo di aver capito che devo mettere una key primaria sulla tab Cat e una Key esterna
    sulla Tab Prodotti e fare una query.
    codice:
    SELECT * 
    FROM cat, prodotti
    WHERE cat.type = prodotti.type
    LIMIT 0 , 30
    ora il problema è che mi esce fuori un XML del Genere

    codice:
    <?xml version="1.0" encoding="utf-8"?>
    <category>
    <type name="Donna"> 
    <product> 
    <name>Giacca Donna</name> 
    </product> 
    </type>
    
    <type name="Uomo"> 
    <product> 
    <name>Giacca Uomo</name> 
    </product> 
    </type>
    
    <type name="Donna"> 
    <product> 
    <name>Gonna Donna</name> 
    </product> 
    </type>
    
    <type name="Donna"> 
    <product> 
    <name>Camicia Donna</name> 
    </product> 
    </type>
    </category>
    Come puoi vedere il Tag <type name> si ripete piu volte mentre dovrebbe essere così
    codice:
    <?xml version="1.0" encoding="utf-8"?>
    <category>
    <type name="Donna"> 
    <product> 
    <name>Giacca Donna</name> 
    <name>Gonna Donna</name>
    <name>Camicia Donna</name> 
    </product> 
    </type>
    
    <type name="Uomo"> 
    <product> 
    <name>Giacca Uomo</name> 
    <name>Giacca Renna Uomo</name> 
    </product> 
    </type>
    
    </category>
    ho provato con Select Distinct ma non va.
    Sicuro è un errore nel ciclo ma non riesco a capire.

    GRAZIE IN ANTICIPO

  2. #12
    Le tabelle dovrebbero essere fatte in questo modo:

    tabella Cat ( Id,Type , Descrizione )
    tabella Prodotti ( Id, Item, Nome , Type)

    Ti ho sottolineato i campi che entrano in gioco nella query


    SELECT Cat.Descrizione, Prodotti.Nome
    FROM Cat INNER JOIN Prodotti ON Cat.type = Prodotti.type
    LIMIT 0 , 30

    Fai attenzione ai nomi delle tabelle e dei campi, potrebbero essere diversi da quelli che hai usato tu fino ad ora (specialmente per il maiuscolo iniziale)
    L' errore che non eri riuscito a risolvere con DISTINCT lo risolvi con INNER JOIN


    Il problema del raggruppamento invece lo pui risolvere in due modi:[list=1][*] utilizzando un GROUP BY sulle singole categorie e poi facendo un ciclo con tante query con la clausola WHERE.[*] ricombinando l' array di risultati.[/list=1]

    Ti mostro un esempio per il secondo metodo:


    Codice PHP:

    $arrayricombinato
    =  array();

    $sql "
    SELECT Cat.Descrizione, Prodotti.Nome
    FROM Cat INNER JOIN Prodotti ON Cat.type = Prodotti.type
    LIMIT 0 , 30"
    ;

    $result mysql_query($sql);

    if (!
    $result) {
        echo 
    "Could not successfully run query ($sql) from DB: " mysql_error();
        exit;
    }

    if (
    mysql_num_rows($result) == 0) {
        echo 
    "No rows found, nothing to print so am exiting";
        exit;
    }


    while (
    $row mysql_fetch_assoc($result)) {
    $arrayricombinato[$row["Descrizione"]][]=$row["Nome"];
    }



    foreach (
    $arrayricombinato as $key => $val) {

        echo 
    '<type name="' .$key'"> 
        <product>'
    ;

        foreach (
    $val as $entry) {
            echo 
    '<name>' $entry '</name>';
        }

        echo 
    '</product> 
        </type>'
    ;




    In questo codice devi solo usare una variabile anziche' echo ed aggiungere prima e dopo i tag che io non ho gestito
    ( all' inizio <?xml version="1.0" encoding="utf-8"?><category>,ed alla fine </category>

  3. #13
    Grazie Gianluca.
    Ho provato tuo codice e sembra vada bene.
    Ho pero la necessita di mettere piu campi della tabella prodotti nell'Array.
    codice:
    $arrayricombinato[$row["type"]][]=$row["name"];
    In questo modo mi popola array soltato con il Nome mentre io avrei bisogno di recuperare tutti
    i campi della Tab Prodotti per poi recuperare con For each.

    Help Me

  4. #14
    nella parte della query ti fai restituire tutti i dati che ti servono
    Codice PHP:
    $sql ="SELECT Cat.Descrizione, Prodotti.Nome, Prodotti.x, Prodotti.y, Prodotti.z, Prodotti.etcetc
    FROM Cat INNER JOIN Prodotti ON Cat.type = Prodotti.type
    LIMIT 0 , 30"

    nella parte della ricombinazione usi tutta la riga (per comodita' usala tutta anche se descrizione non ti serve e la filtri piu avanti)
    Codice PHP:
    $arrayricombinato[$row["type"]][]=$row
    nella parte del ciclo dove utilizzi i dati usi
    Codice PHP:
    foreach ($arrayricombinato as $key => $val) {

        echo 
    '<type name="' .$key'">
        <product>'
    ;

        foreach (
    $val as $key2 => $val2) {
          if(
    $key2!='Descrizione')  echo '<' $key2'>' $val2 '</' $key2'>';
        }

        echo 
    '</product>
        </type>'
    ;



    dovresti avere un xml come il seguente:

    codice:
    <type name="Donna"> 
    <product> 
    <name>Giacca Donna</name> 
    <x>valore di x</x> 
    <y>valore di y</y> 
    <z>valore di z</z> 
    <etcetc>valore di etcetc</etcetc> 
    <name>Cappello Donna</name> 
    <x>valore di x</x> 
    <y>valore di y</y> 
    <z>valore di z</z> 
    <etcetc>valore di etcetc</etcetc> 
    </product> 
    </type>

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.