• User

    Query "particolare"

    salve,
    devo ordinare una tabella mysql con un ciclo php per un sito di stampanti.

    la mia tabella è composta da tipo(es. stampanti laser), serie(es. deskjett) e modello (es. 100)

    fin qui tutto ok. vorrei che i risultati fossero visualizzati nella pagina php così

    Tipo_1

    **serie_1 **
    modello1, modello2, modello3, modello4

    serie_2
    modello1, modello2

    Tipo_2
    serie ecc..ecc...

    Vorrei raggruppare tutte le stampanti così in un unica pagina.

    E' forse possibilie secondo voi?
    Aiutatemi please!


  • Moderatore

    così ad occhio mi verrebbe da creare una tabella con campi id e tipo in questo modo posso fare un left join in query e ordinarli secondo quegli id 🙂
    Sono con il cell ora inizia a buttare giù qualcosa e ci lavoriamo


  • User

    grande massimux!
    allora ho fatto una tabella stampanti_tipo:

    +---------------------------------
    | tipo_id | tipo

    | 1 | getto d'inchiostro

    | 2 | laser

    e poi quella stampanti:

    | stampante_id | tipo_id | marca | serie | modello |

    | 1 | 1 | epson | Stylus | 400 |

    | 2 | 1 | epson | Stylus | 200 |

    | 2 | 2 | epson | laser1 | DXN |

    | 2 | 2 | epson | laser2 | DXN-2 |

    poi in PHP ho fatto la left join:

     
    <?php
     
    $query = "SELECT stampanti.serie AS serie, stampanti.modello AS modello, stampanti.tipo_id AS tipo_id, stampanti_tipo.tipo AS tipo FROM stampanti LEFT JOIN stampanti_tipo ON stampanti.tipo_id=stampanti_tipo.tipo_id ORDER BY stampanti.tipo_id";
    $result = mysql_query($query, $db);
     
    //ciclo visualizzazione
     
    if (mysql_num_rows($result) == 0) {
     
    echo "<p>Non ci sono stampanti.</p>";
     
    }else{
     
    while($row = mysql_fetch_assoc($result)){
     
    echo $row['tipo']." - ".$row['serie']." - ".$row['modello']."<br />";
     
    } //fine while
     
     
     
    } //fine if
     
    ?>
    
    

    e visualizza così:

    Stampanti a Getto d'inchiostro - Stylus - 400
    Stampanti a Getto d'inchiostro - Stylus - 200
    Stampanti Laser - laser1- DXN
    Stampanti Laser - laser2 - DXN-2

    fin qui ci sono però vorrei raggrupparle come ti dicevo nel primo post magari ordinate anche per serie e modello (in ordine alfabetico) tipo così:

    stampanti getto inchiostro

    Stylus
    200, 400

    Stampanti Laser

    laser1
    DXN, DXN-2


  • User

    nessuno sà come aiutarmi???


  • Consiglio Direttivo

    Ciao lurulu
    credo che per fare cio' che ti interessa dovrai annidare più cicli:
    con un ciclo ti tiri fuori il contenuto della 1^ tabella, ovvero: Getto d'inchiostro o Laser
    al suo interno cicli le marche associate alla selezione passante:

     
    SELECT.........WHERE tipo_id=1
    
    

    per ogni ciclo ti uscirai così le marche, annidi un altro ciclo e ti uscirà la serie ed infine con un altro ciclo ti esci il modello....
    é un po laborioso....ma se po fa' 😉


  • User

    se ho capito bene intendi annidare 3 query così?

    SELECT-tipo{
    [INDENT]SELECT-serie{
    [INDENT]SELECT-modello{

    }
    [/INDENT]}
    [/INDENT]}

    ma così, supponendo che in futuro ci saranno tanti modelli di decine di serie diverse non diventerebbero troppe query? secondo te potrebbero appesantire l'applicazione?


  • Consiglio Direttivo

    Se non ho fatto male i calcoli a me risultano 4 😄
    tipo - marca - serie - modello
    comunque si, questo è quello che credo possa far al caso tuo 😉

    EDIT: ovviamente ad ogni ciclo annidato dovrai assegnare la selezione passante del ciclo superiore 😉