Visualizzazione dei risultati da 1 a 3 su 3

Discussione: ciclo con explode

  1. #1

    ciclo con explode

    Buongiorno a tutti........

    ho un problema e spero che mmi aiutate a risolverlo........ è un po' lungo a spiegarlo ma cerco di essere più precisa possibile.......

    ipotiziamo un DB di pizze, dove ci saranno categorie e ingredienti come input principali.....

    es. categorie
    1= rossa
    2= bianca
    3= carne
    4= verdure


    es. ingredienti
    1= mozzarella
    2= pomarola
    3= pomodorini
    4= prosciutto
    5= salsiccia
    6= basilico
    7= zucchine
    8= melanzane


    struttura del DB "pizze"

    id - cat - nome - ingr

    record:
    1 - 1,3 - prosciutto - 1,2,4
    2 - 2,3 - salsiccia - 1,5
    3 - 2,4 - tricolor - 1,3,6
    4 - 1,4 - vegetariana - 1,2,7,8


    es. devo visualizzare tutti i record con categoria 1 (rossa) E ingrediente 7 (zucchine)

    ho provato a fare una query dove estrapola tutto e fare un explode di cat e ingr e fin qui ok, ma poi nn riesco ad andare avanti, ho provato con foreach ma giustamente lo fa su un explode solo.....

    posto un po' di codice:
    Codice PHP:
    $query=mysql_query("SELECT * FROM pizze ORDER BY id ASC");
        
        while(
    $riga_menu=mysql_fetch_array($query))
            {
                
    $exp_cat explode(","$riga_menu['cat']);
                
    $exp_ingr explode(","$riga_menu['ingr']);
                
                if (!empty (
    $riga_menu['cat'])) {
                    foreach (
    $exp_cat as $ctg_id) {
                        
                        if (
    $idctg==$ctg_id) {
                            
    $query_cat=mysql_query("SELECT * FROM pizze WHERE cat=$ctg_id AND ingr=$idingr ORDER BY id ASC");
                                while(
    $riga_cat=mysql_fetch_array($query_cat))
            {            echo 
    '<li>'.$riga_cat['nome'].'</li>
                '
    ;
            }


                        }
                    }
                }
                if (!empty (
    $riga_menu['ingr'])) {
                    foreach (
    $exp_ingr as $idingr) {
                        
    $id_ingr=$ingr_id;
                    }
                }
            } 

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Secondo me risolvi solo modificando la query, per esempio questa

    Codice PHP:
    $query=mysql_query("SELECT * FROM pizze WHERE cat LIKE '%$categoria,%' AND ingr LIKE '%$ingrediente,%' ORDER BY id ASC"); 
    Ti quasi funzionerebbe.
    Dico quasi perché se cerchi l'ingrediente 1 e una pizza non ha l'1, ma l'11, te la prende comunque (col 12 però non lo farebbe, perché c'è la , nel LIKE), andrebbe quindi ottimizzata la query o la struttura del DB.

    Ad ogni modo, tutto il casino in PHP penso sia evitabile, anche perché prendere tutto il contenuto di un db per poi fare una scrematura dei risultati non è la pratica corretta.

    Vediamo un attimo come si evolve la situazione e in caso ti sposto nella sezione Database, dove sono più bravi con queste cose

  3. #3
    Utente di HTML.it L'avatar di Webmaster76
    Registrato dal
    Mar 2001
    residenza
    Torino
    Messaggi
    298
    Ma tu dovresti avere la tabella "pizze", la tabella "ingredienti" e la tabella "associazioni" non una unica tabella...

    PIZZE
    (idPizza - descrizione)
    1 - rossa
    2 - bianca
    3 - carne
    4 - verdure


    INGREDIENTI
    (idIngrediente - descrizione)
    1 - mozzarella
    2 - pomarola
    3 - pomodorini
    4 - prosciutto
    5 - salsiccia
    6 - basilico
    7 - zucchine
    8 - melanzane

    ASSOCIAZIONI
    (id - idPizza - idIngrediente)
    1 - 1 - 1
    2 - 1 - 6
    3 - 3 - 1
    4 - 3 - 5
    5 - 3 - 6

    Ok?

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.