alle einträge eines feldes editieren?

nireus

Grünschnabel
hihi!
ich frag mich schon den ganzen tag, wie es möglich ist, in einer spalte einer tabelle den wert jeder zeile auf einen bestimmten wert (aus einem array) zu setzen...
folgendermaßen:

_____|_spalte1_|_spalte2_...usw...
zeile1 |____x1___| unwichtig
zeile2 |____x2___| unwichtig
zeile3 |____x3___| unwichtig

ich habe ein array a[1] bis a[3] und will nun x1 auf a[1], x2 auf a[2] und x3 auf a[3] setzen - und zwar mit EINER EINZIGEN mysql-anfrage. wie geht das?

ich hab das so gemacht:
PHP:
$sql = "SELECT id FROM tabelle";
$result = mysql_query($sql, $db);
while ($myrow = mysql_fetch_row($result))
{  
	$row_id = $myrow[0];
	$sql = "UPDATE tabelle SET spalte1 = '$a[$row_id]' WHERE id = '$row_id'";
	mysql_query($sql, $db);
}
damit hab ich's zwar hingekriegt, aber die lösung ist mist. damit mache ich zu viele datenbankabfragen und das dauert ewig...

also - bitte - verratet mir, wie ich das mit einer einzigen abfrage machen kann.
thx
 
Das wird mit einer einzigen Abfrage nicht gehen, denn du willst ja in jeden Datensatz einen anderen Wert einfügen, also den aus deinem Array. Es gibt aber noch eine Möglichkeit, wie du das etwas schneller machen kannst. Und Zwar indem du deinen $sql-String verkettest und nicht jede Abfrage einzeln an den SQL-Server schickst sonder gleich 100 oder 200 oder mehr auf einmal.

PHP:
$sql = "SELECT id FROM tabelle";
$result = mysql_query($sql, $db);
$sql="";
$count=0;
while ($myrow = mysql_fetch_row($result))
{
  $sql += "UPDATE tabelle SET spalte1 = '$a[$row_id]' WHERE id = '$row_id' ";  // wichtig am ende ein Leerzeichen rein
  count++;
  if( (count%200)==0 )
  {
    mysql_query($sql, $db);
    sql="";
  }
}

So schickst du 200 Querys auf einmal an den Server und die Ausführ geht etwas schneller. Diese Möglichkeit bietet sich im Übrigen immer bei UPDATE und INSERT INTO an, wenn sehr viele in einer Schleife ausgeführt werden sollen

Gruss Homer
 

Neue Beiträge

Zurück