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

    Problemi per la realizzazione di relazione tra 2 tabelle

    Ciao a tutti,
    questo é il mio primo post.
    Colgo l'occasione per complimentarvi con tutti voi, siete una community davvero molto preziosa..

    Vengo al mio quesito, ci sto smenando da un po' e non ne esco vivo
    Allora, ho 2 tabelle così costruite:
    categorie
    id categoria
    -------------------------------
    1 cat1
    2 cat2
    3 cat3
    4 cat4
    5 cat n

    sottocategorie
    id id_categoria sottocategoria
    --------------------------------
    1 1 sottocat1
    2 1 sottocat2
    3 2 sottocat3
    4 4 sottocat4

    Ora, quello che vorrei fare io é far vedere l'elenco delle categorie e sotto ognuna le relative sottocategorie.

    Quindi ho pensato di ragionare a blocchi:
    1- Estrazione delle categorie con questo codice qui:
    Codice PHP:
    <? include("connect_db.php");
    $categorie="SELECT * FROM categorie ORDER by id";
    $esegui_categorie=mysql_query($categorie$admin) or die(mysql_error());
    while(
    $cat=mysql_fetch_array($esegui_categorie)){ ?>
        
    <table width="50%" border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td width="16%"><?php echo $cat['id'];  ?></td>
        <td width="84%"><?php echo $cat['categoria'];  ?></td>
      </tr>
      <tr>
        <td></td>
        <td></p>
    </td>
      </tr>
      <tr>  </tr>
    </table>

    <?php }?>
    A questo punto ho pensato di fare la stessa cosa per le sottocategorie filtrandole per tipologia di categorie:
    E qui mi sono un po' arenato, nel senso che ho pensato ad una query del genere:
    Codice PHP:
     SELECT categorie.categoriasottocategorie.sottocategoria FROM categorie INNER JOIN sottocategorie ON categorie.id sottocategorie.id_categoria 
    e quindi di trasformare la parte di codice di prima in:

    Codice PHP:
    <?php 
    include("connect_db.php");
    $categorie="SELECT * FROM categorie";
    $sottocategorie="SELECT categorie.categoria, sottocategorie.sottocategoria FROM categorie INNER JOIN sottocategorie ON categorie.id = sottocategorie.id_categoria";

        
    $esegui_categorie=mysql_query($categorie$admin) or die(mysql_error());
        
    $esegui_sottocategorie=mysql_query($sottocategorie$admin) or die(mysql_error());
    while(
    $cat=mysql_fetch_array($esegui_categorie)){ 
    while(
    $sottocat=mysql_fetch_array($esegui_sottocategorie)){?>
    <table width="50%" border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td width="16%"><?php echo $cat['id'];  ?></td>
        <td width="84%"><?php echo $cat['categoria'];  ?></td>
      </tr>
      <tr>
        <td></td>
        <td><?php  echo $sottocat['id_categoria'];  ?> | <?php  echo $sottocat['sottocategoria'];  ?></p>
    </td>
      </tr>
      <tr>  </tr>
    </table>

    <?php }?>
    <?php 
    }?>
    Però non funziona neanche un po'!!!!!
    nel senso che mi rimanda una lista di categorie (oltretutto sempre la stessa) e mi ci piazza nella td sottostante (dedicate alle sottocategorie relative alle categorie) un solo dato e non relativo alla categoria :-(

    Quindi ho dedotto che c'é qualcosa di sbagliato nello script...
    Ma non riesco a capire cosa!!!!!

    Qualcuno di voi ha una mezza idea?

    Grazie mille in anticipo all'anima pia che vorrà aiutarmi

  2. #2
    Codice PHP:
    <?php
    // Esegui la query
    $sql "SELECT categorie.id AS cat_id,
                   categoria,
                   sottocategorie.id AS sottocat_id,
                   sottocategoria
            FROM categorie
            LEFT JOIN sottocategorie
            ON categorie.id = sottocategorie.id_categoria"
    ;

    $result mysql_query($sql);

    // Crei un array in cui mettere la struttura dei dati
    // che dopo stamperai - $data e' un array multidimensionale
    // puoi vedere la struttura mettendo un print_r($data)
    // dopo il while()
    $data = array();

    while ( 
    $record mysql_fetch_assoc($result) ) {

        
    // gli indici principali sono i nomi delle categorie
        // il primo elemento e' l'id
        
    $data[$record['categoria']]['id'] = $record['cat_id'];

        
    // se ci sono sottocategorie, crei un altro array e lo
        // aggiungi al principale
        
    if ( !empty($record['sottocat_id']) ) {
            
    $temp = array(
                
    'id'   => $record['sottocat_id'],
                
    'nome' => $record['sottocategoria'],
            );
            
    $data[$record['categoria']]['sottocategorie'][] = $temp;
        }
    }
    ?>


    <ul>
    <?php foreach ( $data as $key => $val ): ?>
        [*]
            [<?php echo $val['id']; ?><?php echo $key?>
            <?php if ( isset($val['sottocategorie']) ): ?>
            <ul>
            <?php foreach ( $val['sottocategorie'] as $sottocategoria ): ?>
                [*][<?php echo $sottocategoria['id']; ?><?php echo $sottocategoria['nome']; ?>
            <?php endforeach; ?>
            [/list]
            <?php endif; ?>
        
    <?php endforeach; ?>[/list]

  3. #3
    Ciao k.b,
    scusa se rispondo con questo ritardo, ma sono stato fuori ufficio.

    Grazie mille per l'aiuto!!!
    Vista la tua disponibilità ti chiedo ancora una cosa: A questo punto se volessi includere una terza tabella (quella prodotti) dovrei aggiungere una condizione nella Select, giusto?:

    La tabella é strutturata così:
    id | id_categoria | id_sottocategoria | prodotto | allegato

    da
    Codice PHP:
    $sql "SELECT categorie.id AS cat_id, 
                   categoria, 
                   sottocategorie.id AS sottocat_id, 
                   sottocategoria 
            FROM categorie 
            LEFT JOIN sottocategorie 
            ON categorie.id = sottocategorie.id_categoria"

    a
    Codice PHP:
    <? $sql "SELECT categorie.id AS cat_id, 
                   categoria, 
                   sottocategorie.id AS sottocat_id, 
                   sottocategoria 
            FROM categorie 
            LEFT JOIN sottocategorie 
            ON categorie.id = sottocategorie.id_categoria
            
            LEFT JOIN prodotti.* ON categorie.id = sottocategorie.id_categoria "
    ;
    ?>
    Basterebbe per estrarre i dati presenti nella tabella dei prodotti?

    Grazie per la pazienza... :-)

    vita.solitaria

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.