2015-04-21 10 views
8

Zaktualizowałem swoje rekordy na podstawie określonego warunku, po którym chcę poznać identyfikatory z odpowiednich wierszy.Wybierz ostatnie dotknięte wiersze

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

Teraz po wykonaniu tego zapytania chcę poznać dotknięte wiersze.

+1

Numer jest dostępny w 'mysqli_affected_rows' wiersze (i identyfikator użytkownika) sami trzeba by wybrać w innym zapytaniu. – jeroen

+0

@jeron potrzebuję rekordów brata –

+1

Nuta boczna: wydajesz się walczyć z cukrem syntaktycznym. Co powiesz na '' UPDATE foo SET xxx = ?, yyy =? ''? Nawet '" UPDATE foo SET xxx = '$ x', yyy = '$ y' "' jest bardziej czytelne. –

Odpowiedz

-1

Musisz najpierw pobrać identyfikatorów i następnie wykonać aktualizację. Jeśli współbieżności jest problemem, można użyć locking read (pod warunkiem, że tabela jest przechowywana w silniku transakcyjnych, takich jak 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

Jedynym sposobem mogę myśleć jest do pierwszych rzędów sleect które byłyby aktualizacja z rachunku aktualizacji, są to:

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

dodamy xxx !='".$x."' bo jeśli wartość xxx już było $x te wiersze nie mogą być naruszone.

Następnie należy uruchomić aktualizację

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

aby dowiedzieć się ostatni skażoną wiersz tuż po oświadczeniu należy lekko aktualizowany następująco:

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

// funkcji zastosowania

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); 

Jeśli chcesz zaktualizować tylko naprawdę zmieniony wiersz, dodaj warunkową aktualizację user_id przez LAST_INSERT_ID i sprawdź, czy dane zmienią się w tym wierszu.

+0

Jak to będzie działać dla wielu wierszy ? –