UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value';
But what about if you want to update multiple rows but you need the field set to a different value for each row? For example, maybe you have a table of categories with a field to store their display order. How would you update the display order field for each category when the order changes? Most often you will see people just run multiple queries. For example, if you are using PHP you might think to do something like this:
foreach ($display_order as $id => $ordinal) {
$sql = "UPDATE categories SET display_order = $ordinal WHERE id = $id";
mysql_query($sql); }
$sql = "UPDATE categories SET display_order = $ordinal WHERE id = $id";
mysql_query($sql); }
Of course this will work fine, but queries in loops make me start to 
sweat nervously. It’s all to easy to start hammering the database with a
 crazy number of queries. Fortunately there is a better way! The SQL is a
 little more complex, but it is possible to achieve the same result 
using only one query. The syntax is as follows.
UPDATE mytable
SET myfield = CASE other_field
WHEN 1 THEN 'value'
WHEN 2 THEN 'value'
WHEN 3 THEN 'value'
END WHERE id IN (1,2,3)
 SET myfield = CASE other_field
WHEN 1 THEN 'value'
WHEN 2 THEN 'value'
WHEN 3 THEN 'value'
END WHERE id IN (1,2,3)
For multiple Fields use below sql query .
UPDATE categories
SET display_order = CASE id
WHEN 1 THEN 3
WHEN 2 THEN 4
WHEN 3 THEN 5
END,
title = CASE id
WHEN 1 THEN 'New Title 1'
WHEN 2 THEN 'New Title 2'
WHEN 3 THEN 'New Title 3'
END WHERE id IN (1,2,3)
  SET display_order = CASE id
WHEN 1 THEN 3
WHEN 2 THEN 4
WHEN 3 THEN 5
END,
title = CASE id
WHEN 1 THEN 'New Title 1'
WHEN 2 THEN 'New Title 2'
WHEN 3 THEN 'New Title 3'
END WHERE id IN (1,2,3)

No comments:
Post a Comment
Thanks....