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

    [MySQL] Contare Record nel DB

    Sto facendo una directory un può particolare, però sono arrivato in un vicolo ceco...


    Ho il mio database mysql strutturato così:

    Categories
    --- ID_Cat
    --- ID_UndCat
    --- Name

    Sites
    --- ID_Sites
    --- ID_Cat
    --- Link


    Ho strutturato così la mia tabella Categories perchè in questo modo posso avere illimitate categorie che ogniuna di loro può contenere infiniti subcategorie e ogniuna di ogni subcategoria può contenere altre subcategorie e così via all'infinito..
    Una cosa tipo DmoZ..

    Sono riuscito a fare tutto, però non ci riesco adesso a contare quanti siti sono presenti in ogni categoria perchè ogni categoria ha un numero sconosciuto di subcategorie che a sua volta hanno altre subcategorie.. ecc.ecc..ecc...

    Per realizzare questa cosa dovrei fare diversi cicli per recuperare tutte le categoria, però il problema è che non riesco a capire come devo strutturare questi cicli (credo che ne bastano 2 o 3)..


    Qualcuno ha fatto magari qualcosa del genere in passato??
    Ho magari conosce qualche script simile al mio?? In rete ce ne sono a migliardi, però è impossibile controllarli tutti..

    Mi potete aiutare??

  2. #2

  3. #3
    non e' che sia chiara la cosa.

    un sito puo' essere presente in piu' categorie? Se si sei in relazione molti a molti.... se no fai un join tra le due tabelle
    codice:
    SELECT *, count(*) as tot
    FROM categories c
    left join sites s USING(ID_Cat)
    GROUP BY c.ID_Cat
    questo potrebbe essere un esempio....

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  4. #4
    Originariamente inviato da piero.mac
    non e' che sia chiara la cosa.

    un sito puo' essere presente in piu' categorie? Se si sei in relazione molti a molti.... se no fai un join tra le due tabelle
    codice:
    SELECT *, count(*) as tot
    FROM categories c
    left join sites s USING(ID_Cat)
    GROUP BY c.ID_Cat
    questo potrebbe essere un esempio....
    Che fa questo SQL?? E' la prima volta vedo una cosa del genere..

    No, il sito può essere presente solo in una categoria..

    Quando crei una categoria questa però avere quanti ne voi sottocategorie che contengono altre sottocategorie che ogniuna di essi contenga altre sottocategorie ecc. ecc..all'infinito.. Una cosa come DmoZ
    Il problema sorge quando devo contare quanti siti sono presenti in una determinata categoria e in tutte le sue sottocategorie...
    Se si trattasse solo di un livello di sottocategorie sarebbe facile da realizzare, però ho un tot sconosciuto di livelli di sottocategorie. esempio:
    Questa è la mia categoria che voglio ricavare tutti siti presenti in essa:
    directory / Categoria1 /
    poi in questa categoria ho un numero sconosciuto di livelli di sottocategorie es:
    directory / Categoria1 /
    directory / Categoria1 / SottoCategoria1
    directory / Categoria1 / SottoCategoria2
    directory / Categoria1 / SottoCategoria3 / SottoCategoria1
    directory / Categoria1 / SottoCategoria4 / SottoCategoria2
    directory / Categoria1 / SottoCategoria5 / SottoCategoria3 / SottoCategoria1
    ecc.ecc..
    Per livelli intendo:
    directory / Categoria1 / SottoCategoria1 / SottoCategoria1 / SottoCategoria1
    directory / Livello0 / Livello1 / Livello2 / Livello3 / ecc. ec...

    Come si nota, La categoria di nome Categoria1 può avere Infiniti SottoCategorie che a sua volta possono contenere altre SottoCategorie che poi possono contenere altre SottoCategorie, così all'infinito...

    Come potrei strutturare i miei cicli per recuperare tutte le SottoCategorie di una cerca Categoria??

    Io ci ho provato in diversi modo ma non ci sono riuscito..

  5. #5

  6. #6
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    A occhio e croce, in SQL direi che non ce la fai.
    Ti conviene fare una funzione PHP da chiamare in modo ricorsivo.
    Una cosa del genere:

    Codice PHP:
    function leggi($conn,$id) {
        
    $query "SELECT COUNT(*) FROM sites WHERE ID_Cat = '$id'";
        
    $res mysql_query($query,$conn);
        
    $r mysql_fetch_row($res);
        
    $num $r[0];
        
    $query "SELECT ID_Cat FROM categories WHERE ID_UndCat = '$id'";
        
    $res mysql_query($query,$conn);
        while (
    $row mysql_fetch_row($res)) {
            
    $num += leggi($conn,$row[0]);    
        }
    }
    $id //id di partenza per la ricerca
    $totale leggi ($conn,$id); 
    prova...

    (ovviamente $conn contiene la connessione al db, potresti anche non metterlo ma a me piace essere esplicito )

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.