Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2007
    residenza
    Torino
    Messaggi
    18

    Query presentazione risultati tra 2 tabelle

    Ciao a tutti,
    spero di non fare una domanda troppo stupida.
    Sto cercando di creare un artigianale sistema di gestione categoria-sottocategoria-prodotto.
    Il db che ho creato è strutturato così:

    CATEGORIA
    id_categoria
    nome_categoria

    SOTTOCATEGORIA
    id_sottocategoria
    id_categoria
    nome_sottocategoria

    PRODOTTI
    id_prodotto
    id_sottocategoria


    Ora quello che volevo fare era la parte di visualizzazione.
    Quello che cerco di creare è una cosa simile:

    Categoria 1
    - Sottocategoria a
    - Sottocategoria b

    Categoria 2
    - Sottocategoria c
    - Sottocategoria d
    - Sottocategoria e

    e poi, cliccando sulla sottocategoria di riferimento, far vedere il listato dei prodotti.

    La soluzione che mi è venuta in mente, ma che temo essere decisamente complessa e poco elegante, è quella di fare una query per estrapolare le categorie e nel ciclo (un classico while($row = mysql_fetch_array() ) di presentazione, prima della sua chiusura far partire una seconda query di ricerca delle sottocategorie con condizione WHERE...

    Provo a scrivere il codice, magari così risulta più chiaro




    codice:
    <ul>
    <?php
    /*Richiamo le CATEGORIE*/
    $query = "SELECT * FROM categorie";
    $results = mysql_query($query);
    while ($row = mysql_fetch_array($results)){
    $id_categoria = $row['id_categoria'];
    $categoria = $row['nome_categoria'];
    ?>
    	[*]<div class="categoria"><?php echo $categoria; ?></div>
    		<ul> <?php
    		/*Richiamo le SOTTOCATEGORIE*/
    		$query = "SELECT * FROM sottocategorie WHERE id_categoria = $id_categoria";
    		$ris_sottoc = mysql_query($query);
    		while ($sottocat = mysql_fetch_array($ris_sottoc)){
    		$id_sottocategoria = $sottocat['id'];
    		$sottocategoria = $sottocat['nome_sottocategoria'];
    		?> 
    		[*]<div class="sottocat"><?php echo $sottocategoria; ?></div>
    		<?php } ?>[/list]
            
    	<?php } ?>[/list]
    Credo che sia un po' contorto, e che non sia propriamente elegante.
    Ma non ho idea di come poter risolvere la faccenda in altro modo.

    A parte gli insulti (che merito, lo so)... qualcuno potrebbe dirmi se esiste un metodo più semplice per raggiungere il risultato desiderato?
    Voi cinture-nere di php/mysql, come le risolvete queste visualizzazioni?

  2. #2
    Ciao,

    guarda che in sql esistono le join


    con questa query ottieni tutte le accoppiate categoria - sottocategoria in un unico colpo
    Codice PHP:
    $query "SELECT c.nome_categoria, s.nome_sottocategoria 
    FROM categoria c, sottocategoria s 
    WHERE c.id_categoria = s.id_categoria"

    se vuoi puoi aggiungere anche i prodotti e ottenere
    un result composto da row: categoria, sottocategoria

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2007
    residenza
    Torino
    Messaggi
    18
    Ciao, grazie per la risposta.
    Ecco, le join. Le sto guardando un po', sembrano parecchio potenti!!!

    Però in buona sostanza non risolvono del tutto il mio problema.
    Infatti il risultato ora è

    Categoria 1
    - Sottocategoria a
    Categoria 1
    - Sottocategoria b

    Categoria 2
    - Sottocategoria c
    Categoria 2
    - Sottocategoria d
    Categoria 2
    - Sottocategoria e

    invece del necessario
    Categoria 1
    - sottocategoria a
    - sottocategoria b
    etc etc

    ho provato con un DISTINCT, ma chiaramente non serve a molto.


    E' un problema di SELECT o è un problema del ciclo while?

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    98
    Io farei così:

    prima di tutto cambio la query così

    $query = "SELECT c.id_categoria,c.nome_categoria, s.nome_sottocategoria
    FROM categoria c, sottocategoria s
    WHERE c.id_categoria = s.id_categoria";

    poi ciclando:

    $array_res=array();
    while($row=mysql_fetch_array($result){
    // se l'id è uguale cioè la categoria è uguale, l'elemento è sovrascritto con la stessa informazione
    $array_res[$id_categoria]=$row['nome_categoria'];
    $array_res[$id_categoria][]=$row['nome_sottocategoria'];
    }

    for each($array_res as $categoria){

    echo $categoria;

    foreach($categoria as $sub_cat){

    echo $sub_cat;
    }
    }

    fammi sapere

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2007
    residenza
    Torino
    Messaggi
    18
    Ciao e grazie,
    scusa il ritardo stavo guardando un po' bene il tuo codice.
    Non è che l'abbia capito molto bene, e infatti non riesco a farlo funzionare.
    Allora, ho inserito

    codice:
    $result = mysql_query($query);
    per inviare la query.

    Dopodichè ho lanciato il tuo codice, ma.. non va.
    La parte di codice
    codice:
    $array_res[$id_categoria][]=$row['nome_sottocategoria'];
    mi dice che, (sto lavorando in locale con phpmyadmin) non è supportato l'argomento [] ; mettendo apici dentro il risultato è che prende la prima lettera della sottocategoria e il resto delle lettere della categoria (lo giuro)

    Temo di sbagliare qualcosa, e sicuramente non ho ben compreso il funzionamento dello script.
    E di sicuro non riesco a spiegarmi bene io :-(

    ritorno a sbatterci la testa

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    98
    Mi correggo, manca la definizione di $id_categoria:

    $array_res=array();
    while($row=mysql_fetch_array($result){
    // se l'id è uguale cioè la categoria è uguale, l'elemento è sovrascritto con la stessa //informazione
    $id_categoria=$row['id_categoria'];
    $array_res[$id_categoria]=$row['nome_categoria'];
    $array_res[$id_categoria][]=$row['nome_sottocategoria'];
    }

    for each($array_res as $categoria){

    echo $categoria;

    foreach($categoria as $sub_cat){

    echo $sub_cat;
    }
    }

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.