Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2007
    Messaggi
    489

    query mysql, se i valori cambiano viene ancora trovato?

    ciao a tutti!

    la mia domanda é un po difficiel da spiegare.. ci provo con un esempio.

    tabella mysql:

    campi: X, Y , Z
    Valori: 1, 1 , 0
    Valori: 2, 1 , 0
    Valori: 3, 1 , 0
    Valori: 4, 1 , 1
    Valori: 5, 1 , 0
    Valori: 6, 1 , 0
    Valori: 7, 1 , 0
    Valori: 8, 0 , 0
    Valori: 9, 0 , 0
    Valori: 10, 0 , 0


    codice:
    $data=mysql_query("select * from tabella where y=1 order by x asc");
    while ($data1 = mysql_fetch_array($data))
    {
    
    if ($data['z']=='1') mysql_query("update tabella set y=0 where y=1);
    
    
    }
    la domanda é, il codice qui sopra esce dal loop appena passa il quarto valore o arriva fino al settimo?

    se arriva fino al quarto come faccio a farlo smettere prima?

    grazie

    ciao

    Igor

  2. #2
    quell'update ti fa tutta la tabella e dove y=1 ti mettera' y=0. Per tutti i record che rispondono alla condizione y=1. Dopo avrai TUTTI i record con y=0

    Il silenzio č spesso la cosa migliore. Pensa ... č gratis.

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2007
    Messaggi
    489
    si questo si, quello che intendo dire é: se il select * lo faccio PRIMA di mettere a 0 il valore, continuerį il loop con tutti i valori che avevano 1 al momento del select, o viene controllato a ogni loop?

  4. #4
    Originariamente inviato da sharky86
    si questo si, quello che intendo dire é: se il select * lo faccio PRIMA di mettere a 0 il valore, continuerį il loop con tutti i valori che avevano 1 al momento del select, o viene controllato a ogni loop?
    ok. non avevo capito....

    while continua fino a che non riceve un false da mysql_fetch_array()

    ma nel tuo caso in campione mi sembra una cosa inutile. Se il tuo scopo e' mettere y=0 dove il record ha y=1 e z=1 lo puoi fare con una sola query:

    codice:
    mysql_query("update tabella 
                   set y=0 
                   where y=1 and z=1 ");

    @edit ... dimenticavo di farti notare che nella if non e' $data, ma $data1

    Il silenzio č spesso la cosa migliore. Pensa ... č gratis.

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2007
    Messaggi
    489
    ciao! non é cosi semplice, l ho solo fatta corta.. in realtį non uso Z bensi il risultato di un calcolo complesso.. solo che se il risultato é 1 NON deve piu eseguire i risultati che sono dentro al loop. cioé deve uscire..

  6. #6
    Originariamente inviato da sharky86
    ciao! non é cosi semplice, l ho solo fatta corta.. in realtį non uso Z bensi il risultato di un calcolo complesso.. solo che se il risultato é 1 NON deve piu eseguire i risultati che sono dentro al loop. cioé deve uscire..
    che vuoi ... di solito si risponde alle domande e non ai pensieri.

    aggiungi un controllo nella if:

    Codice PHP:
    $fatto 0;

    $data=mysql_query("select * from tabella where y=1 order by x asc");
    while (
    $data1 mysql_fetch_array($data))
    {

       if (
    $data1['z']=='1' AND $fatto == 0)  { 
              
    mysql_query("update tabella set y=0 where y=1");
              
    $fatto 1;
              } else  { }  
    // do nothing  


    rimane sempre il fatto che l'update ti fara' tutta la tabella in una botta sola dove la condizione where y = 1 viene soddisfatta e questo a prescindere qualunque altro limite.

    Il silenzio č spesso la cosa migliore. Pensa ... č gratis.

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2007
    Messaggi
    489
    grazie..

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    22
    Scusate l'ignoranza, ma $data č il resultset della prima query e while estrae un $data1 alla volta da questo resultset; l'update fatto alla tabella che ha originato il resultset si riflette anche su di lui (ovviamente senza che venga rifatta la prima query)?
    o non rimane inalterato per cui while uscirebbe dopo il settimo $data1?
    Grazie del chiarimento, ciao
    Carlo

  9. #9
    Originariamente inviato da CarloG
    Scusate l'ignoranza, ma $data č il resultset della prima query e while estrae un $data1 alla volta da questo resultset; l'update fatto alla tabella che ha originato il resultset si riflette anche su di lui (ovviamente senza che venga rifatta la prima query)?
    o non rimane inalterato per cui while uscirebbe dopo il settimo $data1?
    Grazie del chiarimento, ciao
    Carlo
    Quello che deve fare si capisce meglio solo dopo questo post:

    Originariamente inviato da sharky86
    ciao! non é cosi semplice, l ho solo fatta corta.. in realtį non uso Z bensi il risultato di un calcolo complesso.. solo che se il risultato é 1 NON deve piu eseguire i risultati che sono dentro al loop. cioé deve uscire..
    Si suppone possano esserci piu' risultati con Z = 1, ma lui vuole solo il primo della tabella. Questo si capisce dall'ORDER BY x ASC, senza sapere dove possa essere. Ne vuole solo uno e poi smettere di eseguire gli update successivi.

    Quindi si setta una flag $fatto = 0, il while scorre il result set. La if controlla che z sia = a 1 e la flag $fatto = 0. Se la condizione e' TRUE aggiorna la tabella e posiziona il contatore $fatto a 1.
    A questo punto la palla ritorna al while ma tutti i successivi risultati saranno FALSE nella if, poiche' la condizione $fatto sara' 1 e non piu' 0.

    Si poteva mettere la condizione direttamente nell'update ed eseguire la query in questo modo:

    codice:
    update tabella set y=0 
    where y=1 AND z=1
    order by x asc
    limit 1
    ma visto che sharky86 ha detto che la query era piu' complessa e quello riportato solo un esempio ... appaghiamoci del fatto che contento lui, noi di piu'.

    La tua domanda sul while... no non esce dopo il 7 risultato, esce alla fine del result set quando ricevera' un false da mysql_fetch_assoc() per termine buffer dei risultati.

    Il silenzio č spesso la cosa migliore. Pensa ... č gratis.

  10. #10
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    22
    Per piero.mac: a parte il problema di sharky86, di cui non discuto la tua soluzione, io ho chiesto un chiarimento generico, precisamente:

    il resultset A, ottenuto da una query sulla tabella B, č influenzato da una modifica effettuata alla tabella B durante lo scorrimento del resultset A?

    In attesa, cordiali saluti
    Carlo

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.