php
  • select
  • mysqli
  • 2015-04-21 19 views 8 likes 
    8

    Ich habe meine Datensätze basierend auf bestimmten Bedingungen aktualisiert, danach möchte ich die IDs aus den betroffenen Zeilen wissen.Wählen Sie die letzten betroffenen Zeilen

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

    Jetzt nach der Ausführung dieser Abfrage möchte ich die betroffenen Zeilen wissen.

    +1

    Die Zahl ist in 'mysqli_affected_rows', die Reihen (und ids) selbst würden Sie in einer anderen Abfrage auswählen. – jeroen

    +0

    @jeron Ich brauche die Aufzeichnungen Bruder –

    +1

    Seitliche Notiz: Sie scheinen gegen syntaktischen Zucker zu kämpfen. Wie wäre es mit "UPDATE foo SET xxx = ?, yyy =?" Sogar "UPDATE foo SET xxx = '$ x', yyy = '$ y'" 'ist besser lesbar. –

    Antwort

    -1

    Sie müssen zuerst holen die IDs und dann das Update durchführen. Wenn Gleichzeitigkeit ein Anliegen ist, können Sie eine locking read verwenden (vorausgesetzt, dass Ihre Tabelle in einem Transaktions-Engine wie InnoDB gespeichert ist):

    $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

    Der einzige Weg, ich erste sleect Reihen denken kann, ist, dass sein würde, mit der Update-Anweisung aktualisiert, das sind:

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

    fügen wir xxx !='".$x."' weil, wenn der Wert von xxx bereits $x diese Zeilen nicht betroffen wären war.

    Weiter führen Sie das Update

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

    Um die letzte betroffene Zeile direkt nach der Anweisung herausfinden, sollte es leicht aktualisiert werden, wie folgt:

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

    // Verwendung Funktion

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

    Wenn Sie nur die wirklich geänderte Zeile aktualisieren möchten, fügen Sie eine bedingte Aktualisierung der Benutzer-ID über die LAST_INSERT_ID hinzu und prüfen Sie, ob sich die Daten in der Zeile ändern.

    +0

    Wie das für mehrere Zeilen funktioniert ? –

    1

    einfache, aber effektive

    $last_id = mysqli_insert_id($conn); 
    

    http://www.w3schools.com/php/php_mysql_insert_lastid.asp

    Verwandte Themen