MySQL - Kann man Datensaetze aendern waehrend der Abfrage?

son gohan

Erfahrenes Mitglied
Hallo, ist es moeglich waehrend man Datensaetze zurueck bekommt in einer Schleife den Datensatz auch gleichzeittig zu aendern?

Beispiel, ich bekomme gerade in einer Schleife von mysqli_fetch_array() die Rueckgabe wie folgt:

PHP:
$sql="SELECT * FROM `users`";
$result = mysqli_query($DatabasePointer,$sql) or die(mysqli_error($DatabasePointer));
while($row = mysqli_fetch_array($result))
         {
                  echo $row['name'];
                  echo $row['hobby'];
                  $AktuelleID=$row['id'];
          }

Kann ich dann auch sowas schreiben wie:
PHP:
$sql="SELECT * FROM `users`";
$result = mysqli_query($DatabasePointer,$sql) or die(mysqli_error($DatabasePointer));
while($row = mysqli_fetch_array($result))
{
if($row['hobby']=="lesen")
  {
   sql="UPDATE `users` SET `hobby`='sport' WHERE `id`='".$AktuelleID."' ";
   mysqli_query($DatabasePointer,$sql);
  }
}

Also ein Datensatz aendern waehrend man den abfragt, oder macht man sowas normal nicht beziehungsweise auf eine andere Weise?
 
Hi,

Ja, der obige Code müsste so funktionieren (wobei ich nicht erkennen kann woher $AktuelleID kommt), aber ich würde es trotzdem nicht so lösen aus folgenden Gründen:

* Abfragen in einer Schleife sind normalerweise keine gute Idee. Je weniger Queries, desto besser lautet hier die Faustregel.
* Du frägst Daten ab, welche du gleich auch mutierst. Von daher hast du in PHP noch die alten Werte, während in der DB bereits die Neuen stehen.

In deinem obigen Beispiel könntest du das selbe mit zwei unabhängigen Queries lösen:
* Erst den Update:
SQL:
UPDATE `users` SET `hobby` = 'sport' WHERE `hobby` = 'lesen';
* Dann den Select:
SQL:
SELECT * FROM `users`;

Als kleine Ergänzung noch: Ich würde keinen "SELECT *" machen. Hole dir nur die Spalten, welche du auch tatsächlich benötigst und gib diese explizit an. Das senkt die Last auf der DB und diese kann das ganze auch besser optimieren.

Grüsse,
BK
 
Es hat geklappt mit dem Updaten so wie im beispiel das ich oben geschrieben habe.
Ich frage mich zur Zeit ob es irgendwie moeglich ist ein Datensatz auch complett in eine andere Tabelle zu kopieren, waehrend man in der Scheife von der aktuellen Tabelle die Daten bekommt.

Beispielweise sowas:

PHP:
$sql="SELECT * FROM `users`";
$result = mysqli_query($DatabasePointer,$sql) or die(mysqli_error($DatabasePointer));
while($row = mysqli_fetch_array($result))
{
if($row['hobby']=="lesen")
  {
    //hier sollte ein Mysql Statement den Datensatz kopieren in eine andere Tabelle
  }
}
 
Hallo,

ich habe auch ein Beispiel gefunden und folgendermassen gemacht:

PHP:
$aktuelleid=$row['id'];
$sql="INSERT into `users2` (  
    `id`,  
    `hobbys`)
   SELECT
    `id`,  
    `hobbys`,
    FROM `users` WHERE `id`='".$aktuelleid."'";
    $result = mysqli_query($DatabasePointer,$sql);
 

Neue Beiträge

Zurück