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

    Sostituire valori record

    Ho una tabella con delle ricette, ogni ricetta è caratterizzata da un ingrediente, ad esempio nel "risotto con i funghi" l'ingrediente principale saranno i funghi.

    Il problema è che il database di cui dispongo è composto in questo modo:

    codice:
      Id  | Nome        | Ingrediente |
    --------------------------------
      1   | Pizza        | Mozzarella  |
      2   | Peperonata  | Peperoni    |
    Io vorrei creare una seconda tabella con gli ingredienti e sostituire nella tabella ricette l'id dell'ingrediente al posto di tutto il nome.

    Ho scritto un piccolo script in php per trasferire i file, solo che non capisco perchè non funziona.....

    Codice PHP:
    //Popolamento tabella ingredienti
    $cerca_ricette mysql_query("SELECT * FROM ricette");
    $numero_ricette mysql_num_rows($cerca_ricette);

    for(
    $b=0;$b<=$numero_ricette;$b++) {
        
    $ingrediente mysql_result($cerca_ricette,$b,'Ing_Principale');
        
    $id_ricetta mysql_result($cerca_ricette,$b,'id');
        
    $cerca_ing mysql_query("SELECT id,nome FROM ingredienti WHERE nome = '$ingrediente'");
        
        if (
    mysql_num_rows($cerca_ing) == 0) {
                
    $inserisci_ing mysql_query("INSERT INTO `ingredienti` ( `id` , `nome` )VALUES ('', '$ingrediente')"); // Inserisci ingrediente
                
    $aggiorna_ricetta mysql_query("UPDATE `ricette` SET `Ing_Principale2` = '" .mysql_insert_id() ."' WHERE `ricette`.`id` = $id_ricetta;"); // Aggiorna campo ricetta
            
    } else {
                
    $aggiorna_ricetta mysql_query("UPDATE `ricette` SET `Ing_Principale2` = '" .mysql_result($cerca_ing,0,'id') ."' WHERE `ricette`.`id` = $id_ricetta;"); // Aggiorna campo ricetta
            
    }

    Lo script ora inserisce gli ingredienti, ma anche se trova un record con lo stesso ingrediente nella tabella scrive un nuovo record.... e non aggiorna la tabella ricette (per ora ho creato un nuovo campo 'Ing_Principale2' per non perdere i dati...)

    Fabzine.it: Il blog italiano sulla digital fabrication

  2. #2
    Ciao.

    Hai scritto:

    Id | Nome | Ingrediente |
    --------------------------------
    1 | Pizza | Mozzarella |
    2 | Peperonata | Peperoni |



    $ingrediente = mysql_result($cerca_ricette,$b,'Ing_Principale');

    $aggiorna_ricetta = mysql_query("UPDATE `ricette` SET `Ing_Principale2



    Potresti essere + chiaro e dire i nomi precisi dei campi della tabella ricette? Hai usato 3 nomi diversi per il campo Ingrediente!!!

  3. #3
    Scusate, mi spiego meglio


    codice:
    Ricette
    id   |   Nome 	    Ing_Principale       Ing_Principale2
    ------------------------------------------------------
    1   |   17 Marzo     China Martini                 0 	
    2   |   1908 	 	Cointreau 	           0
    3   |   31 Marzo 	Aperol 	                   0	
    4   |   333 	          Calvados 	           0 	 	
    5   |   4 Luglio 	Vino Rosso 	           0 	 	
    
    
    Ingredienti 
    id |  nome
    -------------------
    1  |  China Martini
    2  |  Cointreau
    3  |  Aperol
    4  |  Calvados
    In paretenza avevo solamente la tabella 'ricette', che aveva nel campo 'Ing_Principale' il nome del ingrediente principale, se questo ingredienete era presente in più ricette veniva ripetuto ogni volta.
    Io vorrei sostituire nella colonna 'Ing_Principale' della tabella 'ricette' il nome dell'ingrediente con l'id relativo del ingrediente nella tabella ingredienti.

    In pratica, vorrei ad esempio che nella tabella 'ricette' che ho scritto sopra al posto di 'Calvados' ci sia '4'.

    Il mio problema è popolare la tabella 'ingredienti' e sostituire nella tabella 'ricette' nel campo 'Ing_Principale' il testo con l'id.
    Il ciclo che ho scritto prima analizza tutte le ricette, prende l'id e vede se è già presente nella tabella 'ingredienti', se si sostituisce solo il nome con l'id altrimenti inserisce l'ingrediente nella tabella 'ingredienti' e poi sostituisce l'id.

    La colonna 'Ing_Principale2' l'ho aggiunta per non rovinare i dati.
    Fabzine.it: Il blog italiano sulla digital fabrication

  4. #4
    Non sono espertissimo su queste cose, ma non so se il problema è dovuto perché tu leggi i dati delle ricette da un certo ResultSet di dati che poi vai anche a modificare. Io ti consiglio di fare in questo modo.
    Anziché crearti un campo di appoggio, potresti crearti una nuova tabella ad esempio nuove_ricette con i campi id nome id_ingrediente

    A questo punto:

    $prendi_ricette = mysql_query("SELECT * FROM ricette");

    while ($riga_ricette = mysql_fetch_assoc($prendi_ricette))
    {
    $id_ricetta = $riga_ricette['id'];
    $nome_ricetta = stripslashes($riga_ricette['Nome']);
    $nome_ingrediente = stripslashes($riga_ricette['Ing_Principale']);

    A questo punto:

    vedi se esiste quell'ingrediente nella tabella Ingredienti:
    se esiste ne prendi l'id, altrimenti lo inserisci e prendi il nuovo id generato.

    A questo punto inserisci i nuovi dati in nuove_ricette:

    $sql_new_ricetta = "INSERT INTO nuove_ricette (id, nome, id_ingrediente)
    VALUES ($id_ricetta, \"$nome_ricetta\", $id_ingrediente)";

    $nuova_ricetta = mysql_query($sql_new_ricetta);
    }

    Prova in questo modo.

  5. #5
    dato che continuava a dare errore e non riuscivo a farlo funzionare ho provato a dividere l'operazione in due passi.
    Prima ho preso tutti gli ingredienti delle ricette e gli ho messi nella tabella ingredienti, sono riuscito a farlo senza doppioni.
    Ora dovrei aggiornare il campo Ingrediente della tabella ricette... ho scritto questo codice ma mi da errore (la riga 62 è la query di update):




    Codice PHP:
    while ($riga_ricette mysql_fetch_assoc($prendi_ricette))
    {
        
    $id_ricetta $riga_ricette['id'];
        
    $nome_ingrediente stripslashes($riga_ricette['Ing_Principale']);
        
    $cerca_ing mysql_query("SELECT id FROM ingredienti WHERE nome LIKE $nome_ingrediente");
        
    $aggiorna_ric mysql_query("UPDATE ricette SET Id_ingrediente = '" .mysql_result($cerca_ing,0,'id') ."' WHERE id = $id_ricetta;"); 


    codice:
    Warning: mysql_result(): supplied argument is not a valid MySQL result resource in C:\Programmi\EasyPHP 2.0b1\www\ricette\index.php on line 62
    Fabzine.it: Il blog italiano sulla digital fabrication

  6. #6
    Prova:

    while ($riga_ricette = mysql_fetch_assoc($prendi_ricette))
    {
    $id_ricetta = $riga_ricette['id'];
    $nome_ingrediente = stripslashes($riga_ricette['Ing_Principale']);
    $cerca_ing = mysql_query("SELECT id FROM ingredienti WHERE nome LIKE $nome_ingrediente");

    $riga_ing = mysql_fetch_assoc($cerca_ing);
    $id_ingrediente = $riga_ing['id'];

    $aggiorna_ric = mysql_query("UPDATE ricette SET Id_ingrediente = $id_ingrediente WHERE id = $id_ricetta;");
    }

    Comunque perchè usi LIKE? Non sarebbe meglio usare l'ugale?

  7. #7
    Funziona! grazie davvero


    Usavo like perchè è impostato di defautl su PhpMyadmin
    Fabzine.it: Il blog italiano sulla digital fabrication

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.