Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    7

    problema con "left outer join"

    Salve,

    ecco il mio problema

    STRUTTURA DATABASE:
    tabella "categories" con i campi:
    category_id
    category_name
    category_desc

    tabella "sub_categories" con i campi:
    sub_category_id
    sub_category_name
    sub_category_desc
    category_id

    QUERY:
    $sql = "select * from categories c left outer join sub_categories s on c.category_id = s.category_id order by c.category_id";
    $result = mysql_query($sql);


    PROBLEMA:
    eseguendo il codice sottostante non mi viene visualizzato il valore di category_id per le categorie che non dispongono di una sottocategoria mentre i valori di category_desc e category_name vengono visualizzati.


    while ($row = mysql_fetch_array($result)) {
    printf("
    ID categoria: %s\n", $row["category_id"]);
    printf("
    Nome categoria: %s\n", $row["category_name"]);
    printf("
    %s<hr>\n", $row["category_desc"]);
    if (isset($row["sub_category_id"])):
    printf("
    ID sottocategoria: %s\n", $row["sub_category_id"]);
    printf("
    Nome sottocategoria: %s\n", $row["sub_category_name"]);
    printf("
    %s</td></tr>\n", $row["sub_category_desc"]);
    endif;

    RISULTATO DELLA STAMPA:
    ID categoria: 7
    Nome categoria : prova nome
    Descrizione categoria: prova descr

    ID sottocategoria: 4
    Nome sottocategoria : dffffgsdfh
    Descrizione sottocategoria:fsdhssdfh

    ID categoria:
    Nome categoria : prova
    Descrizione categoria: descr

    Come vedete l'ultimo "ID categoria" non viene visualizzato nonostante esista.

    Sapete dirmi perché?
    Se immetto la query in phpmyadmin mi visualizza quest'ultimo category_id ...

  2. #2
    Forse sarebbe meglio se prima di continuare leggessi gli articoli su come gestire strutture gerarchiche su db. stanno su freephp.it

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    7

    Risolto

    Il problema era che la query tirava fuori due colonne "category_id" e al momento della stampa prendeva il category_id della tabella sub_categories anziché quella di categories.
    Ho risolto con un alias.

    Il problema era molto banale, sigh.


    $sql = "select *, c.category_id AS ccategory_id from categories c left join sub_categories s on c.category_id = s.category_id order by c.category_id";
    $result = mysql_query($sql);
    while ($row = mysql_fetch_array($result)) {
    print("<tr><td bgcolor=\"#003399\">[b]");
    printf("
    ID categoria: %s\n", $row["ccategory_id"]);
    printf("
    Nome categoria: %s\n", $row["category_name"]);
    printf("
    %s<hr>\n", $row["category_desc"]);
    if (isset($row["sub_category_id"])):
    printf("
    ID sottocategoria: %s\n", $row["sub_category_id"]);
    printf("
    Nome sottocategoria: %s\n", $row["sub_category_name"]);
    printf("
    %s</td></tr>\n", $row["sub_category_desc"]);
    endif;
    }

  4. #4
    Si, ma indipendentemente dal problema il metodo che utilizzi non è per niente flessibile! Ti limita a un livello di sottocategorie. Leggi gli articoli su freephp. Ci sono due metodi descritti. Io ti consiglio il nested set ma va bene anche l'altro per iniziare. Ciao!

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    7
    In realtà non sono proprio all'inizio inizio. Sto studiando il manuale di greenspan e stavo cercando di ampliare i programmi descritti nel libro.
    Riguardo il nested set, credo sia buono nel caso si debbano effettuare poche modifiche all'albero in quanto aggiornare la numerazione di tutti gli oggetti dell'albero ogni volta che ne viene aggiunto uno mi pare un pò lungo come processo.

  6. #6
    No perchè la query è unica. Sicuramente è migliore dell'Adjacency List Model che prevede un campo parent. Lì si che il processo diventa lungo e con alberi che hanno già 4 livelli ti accorgi del calo di prestazioni. Con il nested set invece lo script vola! Cmq ti consiglio di utilizzare uno dei due metodi perchè veramente essere limitati a due livelli è brutto!!! E inoltre combini un casino immenso con il db, occupi tantissimo spazio ed è difficle da gestire.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.