Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    47

    Mysql: doppia lettura al DB e scrittura intermedia

    Salve ragazzi,

    vi faccio una domada da niubbo su un problema che nn riesco a risolvere.

    Devo leggere e scrivere un campo di una tabella più volte, in successione. Il problema è che dopo aver letto e scritto la prima volta. alla seconda lettura mysql legge ancora i dati iniziali, fregandosene della scrittura appena fatta. Come si ovvia al problema (e perché si comporta in questo modo?)?

    Grazie, gauge.

  2. #2
    Sicuramente sbagli da qualche parte... Probabilmente nel php riusi sempre le stesse variabili quando leggi... e quindi leggi sempre lo stesso valore..

    Prima leggi...
    SELECT nomecampo FROM tabella WHERE id = 123

    Poi modifichi...
    UPDATE tabella SET nomecampo='NUOVO VALORE' WHERE id = 123

    Poi RI-leggi... oggio alle varibili
    SELECT nomecampo FROM tabella WHERE id = 123

    Poi rimodifichi e così via..
    UPDATE tabella SET nomecampo='NUOVO VALORE' WHERE id = 123

    Ma che cosa devi fare di preciso?? Perchè Leggi e modifichi , leggi e modifichi?
    Devi per caso incrementare un valore, che ne so' numerico?? in questo caso potresti:

    UPDATE tabella SET nomecampo=nomecampo+1 WHERE id = 123

    Devi per caso concatenare una stringa?? in questo caso potresti:

    UPDATE tabella SET nomecampo=CONCAT(nomecampo,'stringa da attaccare') WHERE id = 123

    Fammi sapere.. magari lancia qualche altro indizio!

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    47
    Il campo è numerico, e si tratta di una prenotazione. Supponiamo di aver prenotato il "campo_calcetto" dal martedì al giovedì. Siccome i campi di calcetto sono 5, il "numero_prenotazioni" è compreso tra 0 e 5. Supponiamo che sia 3 dal martedì al giovedì e che sia 0 il lunedì e il venerdì. Modifico una prenotazione (un singolo campo di calcetto) spostandola all'intervallo mercoledì venerdì. Quello che faccio è sottrarre "1" per i valori di data che vanno dal martedì al giovedì e subito dopo aggiungere "1" per i valori di data che vanno dal mercoled' al venerdì. In conclusione avrò i seguenti valori:

    tabella campo calcetto:

    data numero_prenotazioni

    lunedì 0
    martedì 2
    mercoledì 3
    giovedì 3
    venerdì 1

    Purtroppo quando faccio la seconda lettura (dopo che ho decrementato i valori) la lettura mi da ancora i valori vecchi (quindi mi sta dando ancora i valori non aggiornati) e quando scrivo la seconda i valori sono ovviamente non giusti. Mi sono dimenticato di dire che uso cakephp, anche se credo che nn sia queso il problema, poichè in questo caso sto facendo chiamate "dirette" invece che passare tramite le chiamate indirette tramite modello.

    Grazie dell'aiuto.

  4. #4
    Usi Mysql?
    Usi le funzioni di php quelle che iniziano con mysql_...... oppure delle classi per "interagire" col database?
    Da come parli sembra che tu prepari la query... la invii al database ma lui non la esegue..
    Forse se posti il codice si fa prima, cmq proviamo lo stesso!
    Per quanto riguarda la struttura logica che hai dato alla tabella/e per registrare questi dati, se devo essere sincero non c'ho capito una mazza! MI sembra così complicato per salvarti una cosa così semplice... io mi farei:

    tabella 1:
    campi_di_calcetto

    campi tabella 1:
    id_campo
    nome_campo
    altri_campi

    tabella 2:
    prenotazioni

    campi tabella 2:
    idprenotazione
    id_campo <-- riferimento allla chiave della tabella 1
    data_inizio_prenotazione
    data_fine_prenotazione
    altri_campi_specifici_di_questa_prenotazione(chi ha prenotato, telefonivari,orario,ecc)

    In questo modo mi sembra molto più semplice, anche se ti modifica molto la struttura...

    Cmq il tuo problema (cioè che scrivi e rileggendo vedi i dati vecchi) è nel php.... mandami il codice!

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    47
    Ciao Masta, grazie dell'aiuto, ho risolto:

    Io scrivevo:

    1)

    Codice PHP:
    $sql ="SELECT campi_prenotati FROM disponibilita WHERE data='$arr_dat' AND tipologia_id='$tipo_id'";
                                 
    $prea $this->query($sql);
                                 
    $pre  $prea[0]['disponibilita']['campi_prenotati'];
                                 
    $prex $pre 1;
    $sql="UPDATE disponibilita SET campi_prenotati='$prex' WHERE data='$arr_dat' AND tipologia_id='$tipo_id'";
                                 
    $this->query($sql); 
    L'ho modificato così:

    2)

    Codice PHP:
    //$sql="SELECT campi_prenotati FROM disponibilita WHERE data='$arr_dat' AND tipologia_id='$tipo_id'";
                                 //$prea = $this->query($sql);
                                 //$pre  = $prea[0]['disponibilita']['campi_prenotati'];
                                 //$prex = $pre + 1;
    $sql="UPDATE disponibilita SET campi_prenotati=campi_prenotati + 1 WHERE data='$arr_dat' AND tipologia_id='$tipo_id'";
                                 
    $this->query($sql); 
    E ora funziona. Non capisco bene perché prima nn andasse...mi sembrano equivalenti...
    La soluzione iniziale era "ridondante" e un po stupida, ma l'ho fatta x avere un debug puntuale.

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.