Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    505

    ritornare valore con query UPDATE

    salve. vorrei sapere se è possibile ritornare, dopo un update, il valore modificato.

    es:

    UPDATE tracklist SET countview=countview+1 WHERE nome='mario'

    in questo caso, se countview contiene per esempio il valore 21, vorrei ritornare 22 dopo questa chiamata SQL (oppure anche il semplice 21, e poi lo incremento lato server con un ++).

    ho letto questa guida , dove dice :

    "Sometimes you have a lot of processes that could be updating a column value in a table. If you want to return the value before you updated it without using a seperate select (which unless you lock the table could return a different value than is updated) then you can use a mysql variable like this:

    update some_table
    set col = col + 1
    where key = 'some_key_value'
    and @value := col

    The @value := col will always evaluate to true and will store the col value before the update in the @value variable.

    You could then do

    select @value;

    in order to see what the value was before you updated it"

    ho provato a mettere quel select @value alla fine della query update, ma come mi aspettavo non funziona.

    cordiali saluti

  2. #2
    Se ho capito bene hai bisogno di questo:

    Codice PHP:
    <?php
    $query_countview
    ="select countview from tracklist where nome='mario' ";
    $result_countviewmysql_query($query_countview);
    while (
    $countview mysql_fetch_row($result_countview))
    $countview_num implode ($countview);
    $countview_piu_uno = ($countview_num+1);

    UPDATE tracklist SET countview='$countview_piu_uno' WHERE nome='mario'

  3. #3

    Re: ritornare valore con query UPDATE

    Originariamente inviato da markzzz

    ho provato a mettere quel select @value alla fine della query update, ma come mi aspettavo non funziona.

    cordiali saluti
    devi prima settare la variabile sempre tramite mysql_query ovviamente:

    codice:
    set @value = 0;
    
    UPDATE tracklist 
    SET countview=countview+1 
    WHERE nome='mario'
    AND
    @value := countview+1;
    
    select @value;
    son tre query da fare in modo consecutivo. Ti rende il valore dopo l'incremento. Devi anche pero' valutare che l'update sia andato a buon fine.

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

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    505
    Originariamente inviato da FadeToBlack
    Se ho capito bene hai bisogno di questo:

    Codice PHP:
    <?php
    $query_countview
    ="select countview from tracklist where nome='mario' ";
    $result_countviewmysql_query($query_countview);
    while (
    $countview mysql_fetch_row($result_countview))
    $countview_num implode ($countview);
    $countview_piu_uno = ($countview_num+1);

    UPDATE tracklist SET countview='$countview_piu_uno' WHERE nome='mario'
    esatto, però volevo farlo con una singola query anzichè 2.

    @piero.mac : ho provato come mi hai detto, ma mi ritorna 0x3331 invece che il valore o_O

  5. #5
    Originariamente inviato da markzzz

    @piero.mac : ho provato come mi hai detto, ma mi ritorna 0x3331 invece che il valore o_O
    forse dipendera' dal tipo di campo o da qualche altra cazzabuffa magari di versione. Si presume che il campo sia numerico intero. Ti assicuro che funziona.

    @value := countview+1;

    e' un assegnamento e la variabile @value e' sempre true. se non aggiungi il +1 ti ritorna il valore originale, cioe' quello prima della modifica.

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

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    505
    uhm, per adesso ho provato solo da client HeidiSQL; voglio provare a vedere cosa arriva al server dove gira php.

    se non ho capito male :
    Codice PHP:
    $update=mysql_query("set @value = 0; UPDATE tracklist SET countview=countview+1 WHERE trackid='".$_GET['trackid']."' AND
    @value := countview+1; select @value;"
    ,$mydb); 
    una volta inviato questo, cosa devo controllare? cioè me lo salva dentro a $update direttamente o devo usare un fetch/result?
    Codice PHP:
    $valore_count=mysql_result($update,0,'[B]quale campo?[/B]'); 
    grazie per l'aiuto

  7. #7
    hai capito malissimo.

    Codice PHP:
    mysql_query("set @value = 0"); 

    $update mysql_query("UPDATE tracklist 
                           SET countview=countview+1 
                           WHERE trackid='"
    .$_GET['trackid']."' 
                           AND
                           @value := countview+1"
    ); 

    $res mysql_query("select @value");

    $row mysql_fetch_row($res);

    echo 
    $row[0]; 

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

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    505
    uhm...ma quindi con questo metodo devo fare addirittura tre query, che però sicuramente son più leggere delle due che facevo io :
    Codice PHP:
    $update=mysql_query("UPDATE tracklist SET countview=countview+1 WHERE trackid='".$_GET['trackid']."'",$mydb); 

    $query mysql_query("SELECT countview FROM tracklist WHERE trackid='".$_GET['trackid']."'",$mydb);

    $countview=mysql_result($query,0,'countview'); 
    pensavo esistesse un costrutto tipo "returning" dopo l'update, come per l'insert per esempio...

    evidentemente no

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