Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it L'avatar di blob696
    Registrato dal
    Feb 2007
    Messaggi
    119

    subquery update e select

    Sicuramente sbaglio qualcosa di basilare, il ragionamento fila, solo che non funziona.

    allora

    ho una tabella

    con 7 colonne

    id
    valori_raggruppati
    valore_scomposto_0
    valore_scomposto_1
    valore_scomposto_2
    valore_scomposto_3
    valore_scomposto_4
    valore_scomposto_5

    nella colonna id c'è l'id (naturalmente)
    nella colonna valori_raggruppati, ci sono elencati dei prodotti messi tutti insieme

    es: patate - limoni - carciofi - barbabietole

    le altre colonne sono vuote

    io voglio suddividere tutti gli articolo presenti nel campo valori_raggruppati, nei campi valore_scomposto_X

    quindi:

    valore_scomposto_0 conterra: patate
    valore_scomposto_1 conterra: limoni
    valore_scomposto_2 conterra: carciofi
    valore_scomposto_3 conterra: barbabietole
    valore_scomposto_4 sarà vuoto
    valore_scomposto_5 sara vuoto



    premetto che i record sono tantissimi, quindi si dovrà fare il tutto in automatico.


    cosa ho pensato?

    allora, posto il codice:

    Codice PHP:

    /*##### COLLEGAMENTO AL DATABASE ##### */

    $db mysql_connect($db_host$db_user$db_password);
      if (
    $db == FALSE)
        die (
    "Errore nella connessione. Verificare i parametri nel file config.inc.php");

      
    mysql_select_db($db_name$db)
        or die (
    "Errore nella selezione del database. Verificare i parametri nel file config.inc.php");

    /* ##### FINE - COLLEGAMENTO AL DATABASE ##### */



    // faccio la prima query per estrarre tutti i record
    $query "SELECT * FROM nome_tabella";
    $result mysql_query($query$db)
    or die(
    mysql_error());

    //creo il ciclo 
    while ($row mysql_fetch_array($result)) { 


    // sudddivido quello che c'è nel campo 'valori_raggruppati' in una query 

    $valore_scomposto explode " - "$row['valori_raggruppati'], 11); 
    print_r ($valore_scomposto);

    // e fin qui funziona, mi stampa per ogni riga la query $valore_scomposto con i valori suddivisi per chiave.


    // il bello viene ora, devo inserire i valori recuperati con l'EXPLODE nei rispettivi campi.


    // quindi, restando sempre nel ciclo provo a modificare i campi


    $query1 "UPDATE nome_tabella SET 
    `valore_scomposto_0` = '
    $valore_scomposto[0]',
    `valore_scomposto_1` = '
    $valore_scomposto[1]',
    `valore_scomposto_2` = '
    $valore_scomposto[2]',
    `valore_scomposto_3` = '
    $valore_scomposto[3]',
    `valore_scomposto_4` = '
    $valore_scomposto[4]',
    `valore_scomposto_5` = '
    $valore_scomposto[5]',
    WHERE `id` = 
    $row[id] LIMIT 1";


    if (
    mysql_query($query1$db)) 
        echo 
    "La scheda è stata inserita correttamente

    "
    ;
     else 
        echo 
    "Errore durante l' inserimento

    "
    ;
    }


    mysql_close($db); 
    NIENTE DA FARE - NON VA

    Sinceramente non so se sto facendo un insulto a mysql o sbaglio l'impostazione del tutto.

    forse non si può neanche fare con php, ma mi sembra strano.

    Sicuramente si può fare con le subquery, ma ho provato, riprovato e poi comincia la nebbia.

    avete qualche imput?

    ringrazio sempre

    ciao

    Giuseppe

  2. #2
    quando fai print_r($valore_scomposto) ottieni sempre un array di 6 elementi (anche se vuoti)?
    Michele
    King Of The Kill

  3. #3

    Re: subquery update e select

    Originariamente inviato da blob696


    $query1 = "UPDATE nome_tabella SET
    `valore_scomposto_0` = '$valore_scomposto[0]',
    `valore_scomposto_1` = '$valore_scomposto[1]',
    `valore_scomposto_2` = '$valore_scomposto[2]',
    `valore_scomposto_3` = '$valore_scomposto[3]',
    `valore_scomposto_4` = '$valore_scomposto[4]',
    `valore_scomposto_5` = '$valore_scomposto[5]',
    WHERE `id` = $row[id] LIMIT 1";

    Giuseppe
    Un problema è di sicuro l'ultima virgola nella query, appena prima del WHERE, va tolta.
    Poi devi assicurarti che ogni record abbia nel primo campo 6 valori separati dal " - ", altrimenti ti da errore quando cerchi di accedere ai valori mediante $valore_scomposto[].
    CODENCODE \ Branding \ Design \ Marketing
    www.codencode.it

  4. #4
    Esatto...
    per essere sicuro, dopo explode potresti aggiungere un while:

    Codice PHP:
    $valore_scomposto explode " - "$row['valori_raggruppati'], 11);
    while (
    sizeof($valore_scomposto)<6) {
        
    $valore_scomposto[] = '';

    E poi, perché con l'explode dividi la stringa in 11 parti e non in 6?
    Michele
    King Of The Kill

  5. #5
    Utente di HTML.it L'avatar di blob696
    Registrato dal
    Feb 2007
    Messaggi
    119
    innanzi tutto grazie.

    Allora, per il discorso della virgola prima del where è un errore di battitura che ho fatto io qui nel forum, lo script originale è corretto.

    Lo stesso vale per il fatto che divido la stringa in 11 parti e non in 6, è sempre un errore di battitura qui nel forum.

    Per il fatto che se i valori nel primo campo possano essere meno di 6, non mi crea problemi. In ogni caso ho inserito il while dopo explode come mi ha detto KingOfTheKill.

    Ma non funziona lo stesso.

    Quello che mi interessa sapere è se è giusto il procedimento, indipendentemente da eventuali errori di sintassi.

    Cioè se posso inserire una query dentro un altra e in corrispondenza del while.


  6. #6
    Utente di HTML.it L'avatar di Andy_87
    Registrato dal
    Jun 2010
    Messaggi
    323
    Non stai eseguendo una query dentro l'altra, esegui due query in un uno script, una delle quali dentro un while ed entrambe le cose sono lecite.
    Se vuoi posta il codice originale senza errori di battitura, magari postandolo hai dimenticato proprio di scrivere gli errori
    "Se non riuscirò a piegare gli dei del cielo, smuoverò le potenze dell'inferno"
    S. Freud

  7. #7
    ma la parentesi del while dove la chiudi? se dopo il primo update fai mysql_close() dubito che possa funzionare.
    cosa ne dici di postare il codice completo, magari con un copia-incolla, così da evitare errori di battitura?

    EDIT:
    ecco, appunto !

  8. #8
    Utente di HTML.it L'avatar di Andy_87
    Registrato dal
    Jun 2010
    Messaggi
    323
    Rileggendo lo script ho trovato un'errore:
    Codice PHP:
    //Questo è quello che hai scritto tu, solamente un po più pulito

    $db mysql_connect($db_host$db_user$db_password); //in $db metti "la connessione"
    mysql_select_db($db_name$db//selezioni il db ma non lo assegni a nessuna variabile
        
    or die ("Errore nella selezione del database. Verificare i parametri nel file config.inc.php");

    $query "SELECT * FROM nome_tabella";
    $result mysql_query($query$db); //esegui la query su $db, quindi sulla connessione?!..devi eseguirla sul database 
    quindi
    Codice PHP:
    $db mysql_connect($db_host$db_user$db_password); 
    $database mysql_select_db($db_name$db
        or die (
    "Errore nella selezione del database. Verificare i parametri nel file config.inc.php");

    $query "SELECT * FROM nome_tabella";
    $result mysql_query($query$database); 
    "Se non riuscirò a piegare gli dei del cielo, smuoverò le potenze dell'inferno"
    S. Freud

  9. #9
    Utente di HTML.it L'avatar di Andy_87
    Registrato dal
    Jun 2010
    Messaggi
    323
    @google01
    No, la parentesi del while la chiude qui:

    echo "Errore durante l' inserimento

    ";
    }

    e mysql_close() la fa fuori dal while. Quindi questa cosa è giusta.
    "Se non riuscirò a piegare gli dei del cielo, smuoverò le potenze dell'inferno"
    S. Freud

  10. #10
    hai ragione, svista mia

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.