Visualizzazione dei risultati da 1 a 8 su 8

Discussione: Query

  1. #1

    Query

    io ho un database con queste due tabelle

    http://oi50.tinypic.com/2q892s5.jpg


    Quello che vorrei è avere come risultato della query è una cosa del genere:

    pizza.descrizione descrizione ingred. 0 ... descrizione ingr.9 pomodoro prezzo
    margherita mozzarella basilico si 5
    cotto e funghi cotto funghi si 6
    etc

    Il problema è che il massimo che riesco ad ottenere :
    pizza.descrizione ingrediente pomodoro prezzo
    margherita mozzarella si 5
    margherita basilico si 5
    cotto e funghi cotto si 6
    cotto e funghi funghi si 6
    etc

    Se poteste darmi una mano vi sarei immensamente grata

  2. #2
    ciao,

    Non mi e' chiara la tua richiesta. Potresti spiegarmi tutto da zero

  3. #3
    io ho quelle due tabelle ad ex mettiamo:

    tabella pizze
    codpizza..descrizione.....codingr0.codingr1....cod ingr9.pomod..prezzo
    1............margherita...........1.......... 2...........null........si........5
    2............margh bufala........3...........2...........null........ si........6
    etc

    tabella.ingredienti
    codingr.descrizione
    1..........mozzarella
    2..........basilico
    3..........bufala
    etc

    io vorrei una query che mi tirasse fuori un risultato del genere:

    tabella risultato
    nomepizza..........ingr0........ingr1........ingr9 .pomod...prezzo
    margherita.......mozzarella.basilico........null.. ...si..........5
    margh bufala......bufala.....basilico........null.....si ..........6
    etc

    ti è piu chiaro cosi?

  4. #4
    devi mettere in JOIN le due tabelle, e usare la descrizione degli ingredienti (dalla tabella ingredienti) invece dell'id

  5. #5
    Ciao,
    la soluzione al tuo problema è la seguente query:

    codice:
    SELECT *
    FROM ((((((((((TB_PIZZA 
    LEFT JOIN TB_INGREDIENTI I0 ON TB_PIZZA.ID_INGR0 = I0.ID_INGR) 
    LEFT JOIN TB_INGREDIENTI I1 ON TB_PIZZA.ID_INGR0 = I1.ID_INGR) 
    LEFT JOIN TB_INGREDIENTI I2 ON TB_PIZZA.ID_INGR0 = I2.ID_INGR)
    LEFT JOIN TB_INGREDIENTI I3 ON TB_PIZZA.ID_INGR0 = I3.ID_INGR)
    LEFT JOIN TB_INGREDIENTI I4 ON TB_PIZZA.ID_INGR0 = I4.ID_INGR)
    LEFT JOIN TB_INGREDIENTI I5 ON TB_PIZZA.ID_INGR0 = I5.ID_INGR)
    LEFT JOIN TB_INGREDIENTI I6 ON TB_PIZZA.ID_INGR0 = I6.ID_INGR)
    LEFT JOIN TB_INGREDIENTI I7 ON TB_PIZZA.ID_INGR0 = I7.ID_INGR)
    LEFT JOIN TB_INGREDIENTI I8 ON TB_PIZZA.ID_INGR0 = I8.ID_INGR)
    LEFT JOIN TB_INGREDIENTI I9 ON TB_PIZZA.ID_INGR0 = I9.ID_INGR)
    ma in più direi che il tuo approccio non è quello più corretto.
    Se vuoi un consiglio per migliorare la struttura delle tabelle è:

    1 tabella contenente le pizze con i relativi attributi: TB_PIZZA
    1 tabella contenente tutti gli ingredienti con i relativi attributi: TB_INGREDIENTI
    1 tabella contenente il legame fra le pizze e gli ingredienti: TB_LINK_PIZZA_INGREDIENTI

    così procedendo:
    - eviti ridondanze di dati
    - puoi gestire più ingredienti e non solo 10
    - la query diventa più semplice e si aggiorna dinamicamente. Diversamente, se occorre aggiungere l'11simo ingrediente, devi modificare la struttura della tabella e le query

    la query sarebbe:
    SELECT * FROM TB_PIZZA A, TB_LINK_PIZZA_INGREDIENTI B, TB_INGREDIENTI C
    WHERE A.ID_PIZZA=B.ID_PIZZA AND B.ID_INGREDIENTE=C.ID_INGREDIENTE

    dentro le tabelle
    TB_PIZZA
    codice:
    ID_PIZZA	COD_PIZZA	PREZZO
    1		MARGHE		5
    2		4FORM		6
    3		4STAGIO		7
    TB_LINK_PIZZA_INGREDIENTI
    codice:
    ID_PIZZA	ID_INGREDIENTE
    1		1
    1		2
    1		3
    1		4
    2		1
    2		2
    2		3
    3		1
    3		2
    TB_INGREDIENTI
    codice:
    ID_INGREDIENTE	COD_INGR	TIPO
    1		OLIO		COND
    2		FARINA		BASE
    3		PROSCI		SALUMI
    4		FUNGHI		ORTA
    Ciao e facci sapere
    Mik

  6. #6
    Grazie mille a tutti problema risolto

  7. #7
    ----------------------------------------------------
    nello spirito del forum, spiega come hai fatto (postando la soluzione), così aiuterai qualche altro forumista che dovesse avere lo stesso problema.
    ------------------------------------------------------------------------

  8. #8
    Ho eliminato il problema alla radice non gestendolo dalla query bensi ottenendo ciò che volevo attraverso il php

    ecco come ho fatto:

    <?php
    $nomeHost = "localhost";
    $nomeUtente = "root";
    $password = "";
    $nomeDb = "mydb";
    // connessione con il MySQL server
    $connessione = mysql_connect($nomeHost, $nomeUtente, $password)
    or die("Impossibile connettersi all'host $nomeHost");
    // seleziona il database
    mysql_select_db($nomeDb)
    or die( "Impossibile selezionare il database $nomeDb ");

    $query = "SELECT * FROM pizze";
    $query1 = "SELECT * FROM ingredienti";
    $risultato = mysql_query($query) or die("Query fallita".mysql_error());
    $risultato1 = mysql_query($query1) or die("Query fallita".mysql_error());
    $numero = mysql_numrows($risultato);
    $numeroi = mysql_numrows($risultato1);
    $listapizze=array($numero);
    $elemento=array();

    for($j=0;$j<$numero;$j++) {
    $riga = mysql_fetch_array($risultato);
    $stringa="";
    for($i=3;$i<=12;$i++){
    for($k=0;$k<$numeroi;$k++){
    $rigaingr = mysql_fetch_array($risultato1);
    if($riga[$i]==$rigaingr['Cod_Ingrediente']){
    $stringa .= $rigaingr['Descrizione'];
    $stringa .= " ";
    }
    }
    $risultato1 = mysql_query($query1) or die("Query fallita".mysql_error());
    }
    $elemento[0]=$riga['Descrizione'];
    $elemento[1]=$stringa;
    if($riga['Pomodoro']==1)
    $elemento[2]="si";
    else
    $elemento[2]="no";
    $elemento[3]=$riga['Prezzo'];
    $listapizze[]=$elemento;
    }

    ...faccio altre cose...

    // chiude la connessione al database
    mysql_close($connessione);
    ?>

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