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

    estrarre dati da tabella molti a molti in base all id con SQL

    Ciao a tutti sto provando ad estrarre dei dati da un tabella in base all'id e sto avendo dei problemi nel farlo .

    questa operazione avviene all'interno di una pagina prodotti.php che viene creata dinamicamente tramite
    <a href="prodotto.php?id={$row['id_piatto']}">
    selezionando l'ID pdt da un tabbella "piattiPDT". nella pagina prodotti generata in base all'ID nell'URL mi compare cos�: percorso/prodotto.php?id=2
    tale indice verr� richiamato all'interno della pagina con il seguente codice e la prima parte funziona perfettamente mostrandomi tutti i dati che richiedo dalla tabella "piattiPDT" in base all'id richiesto

    $piatto = myDBquery(" SELECT * FROM piattiPDT WHERE id_piatto = {$_GET['id']} " );
    checkErrori($piatto);
    while($row=estraiArray($piatto)):

    la mia seconda necessit� e di mostrare gli ingredienti associati al prodotto e questa operazione viene fatto interrogando la tabella "ingredientiPiatti" ,in cui gli id piatti sono associati agli id ingredienti, e sto usando questo codice:

    $ingredientiPiatto=myDBquery("SELECT piattiPDT.nomePiatto_ita, GROUP_CONCAT( DISTINCT ingredienti.nomeIgrediente_ita
    ORDER BY ingredienti.nomeIgrediente_ita ASC SEPARATOR ', ' ) AS Ingredienti_Piatto
    FROM piattiPDT
    JOIN ingredientiPiatti ON ( piattiPDT.id_piatto = ingredientiPiatti.piatto )
    JOIN ingredienti ON ( ingredienti.id_ingrediente = ingredientiPiatti.ingrediente )
    GROUP BY piattiPDT.id_piatto
    ORDER BY nomePiatto_ita ASC" );
    checkErrori($ingredientiPiatto);
    while($rows=estraiArray($ingredientiPiatto)):
    print_r($rows);

    ma come risultato ho un array all'apparenza casuale in cui gli ingrediente appartengono ad un'altro prodotto

    Array ( [0] => Fagottini di bresaola con ricotta, rucola e noci pecan [nomePiatto_ita] => Fagottini di bresaola con ricotta, rucola e noci pecan [1] => Bresaola, Erba Cipollina, Noci Pecan, olio, Pepe, Ricotta, Rucola, Sale [Ingredienti_Piatto] => Bresaola, Erba Cipollina, Noci Pecan, olio, Pepe, Ricotta, Rucola, Sale )

    Scusate se continuo a chiedere auito e spero di poter ricambiare appena ne sar� in grado.
    Ciao Grazie
    Cordiali saluti
    Valerio

  2. #2
    Sperimentanto un pò ho trovato questa soluzione:
    <?php
    $ingredientiPiatto=myDBquery("SELECT ingrediente
    FROM ingredientiPiatti
    WHERE piatto={$_GET['id']}
    GROUP BY ingredientiPiatti.ingrediente
    ORDER BY ingrediente ASC" );
    checkErrori($ingredientiPiatto);
    while($rows=estraiArray($ingredientiPiatto)):
    echo $rows['ingrediente'];
    ?>


    Ora non so precisamente se questa discussione appartiene alla sezione Database o forse la sezione PHP e quindi chiedo scusa subito se è fuori luogo .
    Comuque il codice presentato mi restituisce correttamente il numero di ID associati ai rispettivi ingredienti ma come valore numerico.
    Per venire a capo del mio problema ora devo associare gli ID restituiti da "echo $rows['ingrediente']" al nome corrispondente che si trova nella tabella ingredienti.
    Grazie per la pazienza
    Cordiali Saluti
    Valerio

  3. #3
    Ciao a tutti mi auto rispondo per la seconda volta, dopo un po di ricerca sono arrivato alle seguente soluzione con i comandi INNER JOINT.
    Per ora questa soluzione mi associa correttamente il piatto ai suoi ingredienti in una pagina prodotto.php.
    __________________________________________________ __________________________________________________ ____________
    $ricercaPiatti= myDBquery("SELECT*FROM piattiPDT WHERE id_piatto={$_GET['id']} ");
    checkErrori($ricercaPiatti);
    $ingredientiPiatto=myDBquery("SELECT
    ingredienti.nomeIngrediente_ita, ingredienti.categoria, ingredienti.allergene,
    piattiPDT.nomePiatto_ita, piattiPDT.infoPiatto_ita, piattiPDT.catPortata, piattiPDT.prezzo, piattiPDT.immagine,
    ingredientiPiatti.piatto, ingredientiPiatti.ingrediente,
    catAllergeni.nomeAllergene_ita,
    catIgredienti.nome_catIgrediente

    FROM ingredienti
    INNER JOIN ingredientiPiatti
    ON ingredienti.id_ingrediente = ingredientiPiatti.ingrediente
    INNER JOIN piattiPDT
    ON piattiPDT.id_piatto = ingredientiPiatti.piatto
    INNER JOIN catAllergeni
    ON catAllergeni.id_Allergene = ingredienti.allergene
    INNER JOIN catIgredienti
    ON catIgredienti.id_catIgredienti = ingredienti.categoria
    WHERE ingredientiPiatti.piatto ={$_GET['id']}
    ");
    checkErrori($ingredientiPiatto);

    while($row=estraiArray($ricercaPiatti)){
    echo $row['nomePiatto_ita']."<br>";
    echo $row['infoPiatto_ita']."<br>";
    echo $row['prezzo']."<br>";
    echo $row['immagine']."<br>";
    }
    while($rows=estraiArray($ingredientiPiatto)){
    echo $rows['nomeIngrediente_ita'].", ";
    echo $rows['nomeAllergene_ita'].", ";
    echo $rows['nome_catIgrediente'].", ";
    }
    __________________________________________________ __________________________________________________ ____________
    Adesso sto utilizzando due diverse query per interrogare il database che hanno in comune la condizione
    WHERE id_piatto={$_GET['id']}
    e successivamente le ho richiamate in due cicli diversi per mostrarmi i dati richiesti.

    Ho provato inoltre ad estrapolare tutti i dati con solo questa query
    __________________________________________________ __________________________________________________ ____________
    $ingredientiPiatto=myDBquery("SELECT
    ingredienti.nomeIngrediente_ita, ingredienti.categoria, ingredienti.allergene,
    piattiPDT.nomePiatto_ita, piattiPDT.infoPiatto_ita, piattiPDT.catPortata, piattiPDT.prezzo, piattiPDT.immagine,
    ingredientiPiatti.piatto, ingredientiPiatti.ingrediente,
    catAllergeni.nomeAllergene_ita,
    catIgredienti.nome_catIgrediente

    FROM ingredienti
    INNER JOIN ingredientiPiatti
    ON ingredienti.id_ingrediente = ingredientiPiatti.ingrediente
    INNER JOIN piattiPDT
    ON piattiPDT.id_piatto = ingredientiPiatti.piatto
    INNER JOIN catAllergeni
    ON catAllergeni.id_Allergene = ingredienti.allergene
    INNER JOIN catIgredienti
    ON catIgredienti.id_catIgredienti = ingredienti.categoria
    WHERE ingredientiPiatti.piatto ={$_GET['id']}
    ");
    checkErrori($ingredientiPiatto);
    while($rows=estraiArray($ingredientiPiatto)){
    echo $rows['nomePiatto_ita'];
    echo $rows['nomeIngrediente_ita'].", ";
    echo $rows['nomeAllergene_ita'].", ";
    echo $rows['nome_catIgrediente'].", ";
    }
    __________________________________________________ __________________________________________________ ____________
    Ma come risultato ottenevo la ripetizione del nomePiatto_ita davanti ad ogni ingrediente presente nel piatto visualizzato.

    Ora le mie domande son le seguenti:

    L�utilizzo di due query in questo caso � corretto o conviene utilizzarne solo una ?
    Se conviene utilizzarne solo una in che modo posso evitare la ripetizione del nome del piatto per ogni ingrediente presente nel piatto?(ho provato ad utilizzare le funzioni GROUP BY senza riuscire ad avere risultati)
    Grazie per la pazienza Cordiali saluti
    Valerio

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.