2013-08-28 3 views
1

Мне нужно обновить строки по их номеру (не AI ID, из-за чего некоторые из строк могут быть удалены). Как я могу это сделать? Я имею в виду что-то вроде этого:Обновление MySQL по номеру строки

UPDATE cars SET idx = value WHERE row_number = i 

Я бы сделать это в «за» заявление, и я это целое моего заявления. Поэтому я бы обновил каждую строку в инструкции.

Извините за мой плохой английский, и спасибо!

+0

какой язык сценариев вы используете? , php? – bhawin

+0

umm ... Я использую Pawn, но php-решение тоже может помочь –

ответ

2

Вот чистое решение MySQL:

/*test data*/ 
create table foo (id int auto_increment primary key, a int); 
insert into foo (a) values (10), (11), (12); 

/*update statement*/ 
update foo 
set a = 5 
where id = (
    select id from (
     select id, @rownum:[email protected] + 1 as rownumber 
     from foo, (select @rownum:=0) vars order by id 
    ) sq where rownumber = 2 
); 

Результаты в:

| ID | A | 
-----|----|-- 
| 1 | 10 | 
| 2 | 5 | 
| 3 | 12 | 

Не стесняйтесь спрашивать, есть ли у вас какие-либо вопросы по этому поводу.

Также обратите внимание на order by id. Это важно, потому что в базе данных нет первой или последней строки. Без теоретического предложения порядок может быть каждый раз другим результатом.

Вы также можете увидеть его working live here in an sqlfiddle.

+0

@AdamSchauer Решение bhawin не детерминировано и, следовательно, подвержено ошибкам. Пожалуйста, рассмотрите мое решение. – fancyPants

+0

Большое спасибо за ссылку sqlfiddle! Теперь я могу понять это как-то. Btw. что означает «@» в SQL? Я никогда раньше этого не видел. –

+0

Используется для пользовательских переменных. Подробнее о них вы можете узнать здесь: http://dev.mysql.com/doc/refman/5.0/en/user-variables.html – fancyPants

0

я не знаю, что это о MySQL, но вы можете сделать это в PHP

$row_number=? ;//the row no of mysql you want to change the id 
$id=? ;//the new id 
mysql_connect //do it yourself 
$query="select 8 from tablename"; //the query 
$result=mysql_query($qyery,$conn); 
$count=0; 
while($row=mysql_fetch_array($result)) // fetch each row one by one an put data in array $row 
{ 
    $count++;  //increment count means the no of rows are incermented 
    if($count==$rownumber) //the row where you want to edit the id 
    { 
     $query1="update tablename set id='".$id."' where id=".$row["id"]; //new query on that particular row 
     $result1=mysql_query($query1,$conn); 
    } 
} 

это будет работать, только изменить этот код, в соответствии с вашим использованием

+0

thnx много человек, я только что составил код, рад, что он решил вашу проблему – bhawin

Смежные вопросы