UPDATE über 2 Zeilen [MySQL]

versuch13

Erfahrenes Mitglied

Hallo, also ich möchte gerne ein UPDATE über zwei Zeilen in einer MySQL (MySQL Client-Version: 4.1.7) Tabelle machen.

Hier mal ein Beispiel mit zwei Queries, und das müßte ich eben in ein Querie bekommen.

Code:
                    $sql1 =   "UPDATE
                                    hmenu
                                SET                 
                                    sortid = '2'
                                WHERE
                                    sortid = '3' ";
                
                    mysql_query($sql1) OR die(mysql_error());

                    $sql2 =   "UPDATE
                                    hmenu
                                SET                 
                                    sortid = '3'
                                WHERE
                                    sortid = '2' ";
                
                    mysql_query($sql2) OR die(mysql_error());


Die Zahlen hier bei sortid werden eigentlich dynamisch erzeugt, hab ich jetzt zum besseren Verständnis hier einfach mal so eingetragen. Wenn ich das so wie oben ausführe wird erst die Zeile mit sortid = 3 geändert, und zwar in sortid = 2, anschließend wird dieselbe Zeile wieder geändert und zwar zurück zu sortid = 3.
Das möchte ich aber nicht erreichen, wäre ja auch sinnlos denke ich. Mir geht es im genauen darum:

In der Zeile mit sortid = 2, soll sortid geändert werden zu sortid = 3.
In der Zeile mit sortid = 3, soll sortid geändert werden zu sortid = 2.



Vielen Dank schon mal. Grüße
 
Zuletzt bearbeitet:
Ich habe mal ein Beispiel gemacht:
Code:
mysql> create table changenumber (id int(11) auto_increment primary key, n int(11));
Query OK, 0 rows affected (0.13 sec)

mysql> insert into changenumber set n=2;
Query OK, 1 row affected (0.05 sec)

mysql> insert into changenumber set n=3;
Query OK, 1 row affected (0.03 sec)

mysql> select * from changenumber;
+----+------+
| id | n    |
+----+------+
|  1 |    2 |
|  2 |    3 |
+----+------+
2 rows in set (0.00 sec)

mysql> update changenumber
    ->   set n = if (n=2,3,2)
    ->   where n=2 || n=3;
Query OK, 2 rows affected (0.05 sec)
Rows matched: 2  Changed: 2  Warnings: 0

mysql> select * from changenumber;
+----+------+
| id | n    |
+----+------+
|  1 |    3 |
|  2 |    2 |
+----+------+
2 rows in set (0.00 sec)
Test war mit MySQL 5.0.22-community-nt.

Du musst dabei Deine Variablen an fünf Stellen einsetzen. Die erste drei mal, die zweite zwei mal.

Gruß hpvw
 
Ok, vielen Dank! Das werde ich sofort mal ausprobieren.

Gruß

Edit: Besten Dank. Funktioniert perfekt.
 
Zuletzt bearbeitet:
Ok, es funktioniert, aber verstehen tu ich es nicht und das würde ich natürlich auch gerne.


Also:

Code:
UPDATE 
          changenumber
set 
          n = if (n=2,3,2)
where 
         n = 2 || n = 3


Der Teil " n = if(n=2,3,2) ", damit kann ich gar nichts anfangen. Mit der WHERE Klausel schon, aber in dem Zusammenhang dann wohl doch nicht.
Weißt du wo ich was darüber nachlesen kann oder wärst du so nett mir das noch kurz zu erklären?
 
Hi,

Code:
set 
          n = if (n=2,3,2)
Bedeutet:
Setze n gleich 3, wenn n 2 ist, ansonsten setzen n gleich 2
if([Bedingung], [Then-Ausdruck], [Else-Ausdruck])
Code:
where 
         n = 2 || n = 3
gilt für alle Datensätze, bei denen n gleich 2 ist oder n = 3 ist

Alle Klarheiten beseitigt?
 
Ah, jetzt ist es mir klar, hätte man auch drauf kommen können. Danke.


Edit: Jetzt hab ich noch ein weiteres Problem. Ist ähnlich, deshalb schreib ich das jetzt mal hier mit rein.

Und zwar geht es wieder um UPDATE, diesmal aber über beliebig viele Zeilen für die eine WHERE Bedingung zu trifft. In den betroffenen Zeilen soll nun die Spalte sortid verändert werden, diese enthält eine Zahl, z.B. die drei, von diesen Spalten möchte ich jeweils -1 abziehen.

Code:
"UPDATE
	changenumbers
SET                 
	sortid = ' '
WHERE
	sortid > '".$_GET['sortid']."' ";

Naja, weiter komm ich einfach nicht.

Erreichen möchte ich also jetzt das aus

sortid = 1
sortid = 3
sortid = 4

das hier wird

sortid = 1
sortid = 2
sortid = 3



EDIT:

Code:
SET sortid = sortid - 1

--> So einfach ist das.

Gruß
 
Zuletzt bearbeitet:
Zurück