2015-04-21 21 views
8

Ho aggiornato i miei record in base a condizioni specifiche dopo che desidero conoscere gli ID dalle righe interessate.Selezionare le ultime righe interessate

$sql = mysqli_query("update table set xxx='".$x."' where yyy='".$y."'"); 

Ora dopo aver eseguito questa query voglio conoscere le righe interessate.

+1

Il numero è disponibile in 'mysqli_affected_rows', le righe (e id) si sarebbe necessario selezionare in un'altra query. – jeroen

+0

@jeron ho bisogno dei dischi fratello –

+1

Nota a margine: sembra che tu stia combattendo contro lo zucchero sintattico. Che ne dite di ''UPDATE foo SET xxx = ?, yyy =?''? Anche "UPDATE foo SET xxx = '$ x', yyy = '$ y'" 'è più leggibile. –

risposta

-1

È necessario prima prendere gli ID, e poi eseguire l'aggiornamento. Se la concorrenza è una preoccupazione, è possibile utilizzare un locking read (a patto che la tabella è memorizzato in un motore transazionale, come InnoDB):

$mysqli->autocommit(FALSE); 

$select = $mysqli->prepare('SELECT id FROM table WHERE yyy = ? FOR UPDATE'); 
$select->bind_param('s', $y); 
$select->execute(); 

$update = $mysqli->prepare('UPDATE table SET xxx = ? WHERE yyy = ?'); 
$update->bind_param('ss', $x, $y); 
$update->execute(); 

$mysqli->commit(); 

// here are the IDs that were updated 
$select->bind_result($id); 
while ($select->fetch()) printf('Updated id: %s\n', $id); 
-1

L'unico modo che posso pensare è quello di prime file sleect che sarebbero aggiornato con la dichiarazione di aggiornamento, questi sono:

$updatableIds = mysqli_query("SELECT id FROM table WHERE xxx !='".$x."' AND yyy='".$y."'"); 

aggiungiamo xxx !='".$x."' perché se il valore di xxx già era $x le righe non sarebbero influenzati.

successivo si esegue l'aggiornamento

$sql = mysqli_query("update table set xxx='".$x."' where yyy='".$y."'"); 
-1
UPDATE users 
SET type = '3' 
WHERE type = '2'; 

Per scoprire l'ultima riga interessata subito dopo la dichiarazione, deve essere un po 'aggiornata come segue:

UPDATE users 
SET type = '3', 
    user_id=LAST_INSERT_ID(user_id) 
WHERE type = '2'; 

// funzione d'uso

function updateAndGetId($value) 
    { 
     $query ="UPDATE users 
    SET type = '$value', 
     user_id=LAST_INSERT_ID(user_id) 
    WHERE type = '2'"; 
     mysql_query($query) 
    return mysql_insert_id(); 
    } 
    $lastUpdatedRow = updateAndGetId(3); 

Nel caso in cui si desideri aggiornare solo la riga realmente modificata, aggiungere un aggiornamento condizionale user_id tramite LAST_INSERT_ID e verificare se i dati cambieranno nella riga.

+0

Come funziona per più righe ? –

Problemi correlati