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

    Query per estrapolazione voci menu

    Salve,
    E' da stamattina che sto impazzendo per cercare un modo per ottenere in output un menu.

    In Mysql ho delle tabelle così organizzate:

    codice:
    Table: CATEGORIES
    
    category_id | category_name
    ----------- |----------------
    1           |Categoria 1
    2           |Categoria 2
    3           |Categoria 3
    
    
    Table: SUBCATEGORIES
    
    subcategory_id | subcategory_category | subcategory_name
    ---------------|----------------------|--------------------
    1              |1                     |Sottocategoria 1 di categoria 1
    2              |1                     |Sottocategoria 2 di categoria 1
    3              |3                     |Sottocategoria 1 di categoria 3
    4              |3                     |Sottocategoria 2 di categoria 3
    In output vorrei ottenere le seguenti voci:

    codice:
    Categoria 1
    Sottocategoria 1 di categoria 1
    Sottocategoria 2 di categoria 1
    Categoria 2
    Categoria 3
    Sottocategoria 1 di categoria 3
    Sottocategoria 2 di categoria 3
    Ho provato diverse query, ma non sono riuscito ad ottenere in output quello che volevo.

    Qualcuno ha qualche consiglio?
    Cambiando la struttura delle tabelle posso facilitare qualcosa?

  2. #2
    Utilizzando un LEFT JOIN riesco ad ottenere in output:

    codice:
    Categoria 1 
    Sottocategoria 1 di categoria 1
    Categoria 1 
    Sottocategoria 2 di categoria 1 
    Categoria 2 
    Categoria 3 
    Sottocategoria 1 di categoria 3 
    Categoria 3
    Sottocategoria 2 di categoria 3
    Come posso fare per evitare di ripetere Categoria 1 e 3 ? , ovvero ottenere in output:

    codice:
    Categoria 1 
    Sottocategoria 1 di categoria 1
    Sottocategoria 2 di categoria 1 
    Categoria 2 
    Categoria 3 
    Sottocategoria 1 di categoria 3 
    Sottocategoria 2 di categoria 3
    ???

  3. #3
    Non vorrei fare casino, ammetto che ho fatto un po' di confusione con quei nomi lunghi...

    codice:
    SELECT categories.category_name, categories.category_id, COUNT(subcategories.subcategory_id) as num FROM categories INNER JOIN subcategories WHERE categories.category_id = subcategories.subcategory_category GROUP BY categories.category_id ORDER BY category_id ASC

    Non ho testato

    Con questo dovresti ottenere il numero delle sottocategorie di ogni categoria, fammi sapere se riesci ad arrivare a fare quello che chiedi.
    Non c'è niente di più immenso del nulla.
    Dunque parlatemi del nulla se non volete mai annoiarmi.


    Nozioni: PHP, ASP, HTML, XHTML, DHTML, XML, Javascript, Actionscript, Ajax, CSS, MySQL, Photoshop, Flash, Dreamweaver, 3D Studio Max, FL Studio, Illustrator, Corel Draw, insomma.... chiedete e basta.

  4. #4
    Per quanto riguarda la tua query risulta corretta, e mi da in output il numero di sottocategorie di categorie che dispongono di sottocategorie;
    Però momentanemente non sono riuscito ad utilizzare questo dato per avvicinarmi a quello che vorrei realizzare.
    Ho provato a ritrattare i dati con array ma per ora inutilmente, il cervello sta fumando e penso che per oggi lascio perdere! eppure sembrava una cosa facile!

  5. #5
    Aspetta, perché forse ho interpretato male la domanda.

    Dunque, la query che dovrebbe servirti è questa:
    codice:
    SELECT categories.category_name, categories.category_id, subcategories.subcategory_name AS num
    FROM categories
    LEFT JOIN subcategories ON categories.category_id = subcategories.subcategory_category
    ORDER BY category_id ASC
    Però dovresti incollarmi la parte in PHP, perché forse ho capito cosa intendi, e dovresti aver bisogno di una condizione per verificare che la categoria sia diversa da quella precedentemente visualizzata.
    Non c'è niente di più immenso del nulla.
    Dunque parlatemi del nulla se non volete mai annoiarmi.


    Nozioni: PHP, ASP, HTML, XHTML, DHTML, XML, Javascript, Actionscript, Ajax, CSS, MySQL, Photoshop, Flash, Dreamweaver, 3D Studio Max, FL Studio, Illustrator, Corel Draw, insomma.... chiedete e basta.

  6. #6
    Perfetto!
    Ci stiamo avvicinando,
    questa è la query che avevo provato ad utilizzare precedentemente!

    codice:
    SELECT categories.category_id, categories.category_name,
    subcategories.subcategory_id, subcategories.subcategory_category,
    subcategories.subcategory_name FROM categories LEFT JOIN subcategories
    ON categories.category_id = subcategories.subcategory_category
    ORDER BY category_id ASC
    Codice PHP utilizzato precedentemente

    Codice PHP:
    <?php
    while ($row=mysql_fetch_array($res))
    {
    if (
    $row[0]==$row[3])
    {echo 
    $row[1].$row[4];}//Mostra categoria e sottocategoria
    else
    {echo 
    $row[1];}//Mostra la categoria
    }
    ?>
    Mi interessa non ristampare nome delle categorie che contengono sottocategorie, per più di una volta.
    Che script mi posso inventare per evitare di ristamparlo?
    Avevo provato con un ulteriore ciclo dentro il ciclo while, ma mi sono perso!

    PS. ho dovuto riscrivere il codice per come me lo ricordavo, il portatile su cui lavoravo si è spento causa temperatura ambientale non adatta a condizioni di lavoro!

  7. #7
    Codice PHP:
    <?php

    while ($menu=mysql_fetch_object($res)) { 
        if (
    $menu->category_id != $prev_cat) {
            echo 
    "$menu->category_name
    $menu->category_name -> $menu->subcategory_name";}
        else {
            echo 
    "$menu->category_name -> $menu->subcategory_name";
        } 
    }

    $prev_cat $menu->category_id;
    ?>
    Non c'è niente di più immenso del nulla.
    Dunque parlatemi del nulla se non volete mai annoiarmi.


    Nozioni: PHP, ASP, HTML, XHTML, DHTML, XML, Javascript, Actionscript, Ajax, CSS, MySQL, Photoshop, Flash, Dreamweaver, 3D Studio Max, FL Studio, Illustrator, Corel Draw, insomma.... chiedete e basta.

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.