SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 01.06.2011 15:06:46

Radamant
Участник
Зарегистрирован: 01.06.2011
Сообщений: 1

разделить выбор на равные части

Доброго всем времени суток. Не могу понять как сформулировать запрос для следующей задачи:

Из базы нужно сделать выбор, по некоторым условиям. Тут все понятно smile затем надо все выбранные строки разделить (примерно) на 3 части, и в каждой части заменить одно из полей на нужное значение. Например, у всех выбранных строк поле 'id'='5', а надо сделать чтобы треть выбора получило значение 'id'='3', другая треть - 'id'='7', третья - 'id'='23'.
LIMIT он ведь только на вывод результатов влияет? т.е. не получится что-то типа (пока напишу без соблюдения синтаксиса) UPDATE 'id'=3 WHERE 'мое условие выбора' LIMIT 0,100 (где 100 - условная треть выборки, например я знаю что всего их там 300)?

Подскажите плиз средство решения такой задачи, или хотя бы какие операторы гуглить. Спасибо.

Неактивен

 

#2 01.06.2011 20:10:56

evgeny
Гуру
Зарегистрирован: 04.05.2009
Сообщений: 335

Re: разделить выбор на равные части

Если я вас правильно понял, то вам нужно это :
(Это логический пример, то есть синтаксис подгоните под ваш язык программирования)

$rows_num=select count(*) rows_num from my_table where type='5';
$part=$rows_num/3;
update my_table set id='3' where type='5' limit $part;
update my_table set id='7' where type='5' limit $part;
update my_table set id='23' where type='5' limit $part;

Неактивен

 

#3 02.06.2011 16:42:45

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: разделить выбор на равные части

Эм. Оно заменит три раза одно и то же. Нужно LIMIT 200,100 — пропустит
200 строк (первые две сотни) и заменит следующие 100. Если просто LIMIT
100, то это одинаковые запросы будут wink

Неактивен

 

#4 02.06.2011 18:33:20

evgeny
Гуру
Зарегистрирован: 04.05.2009
Сообщений: 335

Re: разделить выбор на равные части

paulus, Верно ... Опечатался я ... :-)

Я имел виду так

$rows_num=select count(*) rows_num from my_table where id='5';
$part=$rows_num/3;
update my_table set id='3' where id='5' limit $part;
update my_table set id='7' where id='5' limit $part;
update my_table set id='23' where id='5' limit $part;


Или так можно, если по другому полю надо ...
$rows_num=select count(*) rows_num from my_table where type='5';
$part=$rows_num/3;
update my_table set id='3' where type='5' limit $part;
update my_table set id='7' where type='5' limit ($part*2),$part;
update my_table set id='23' where type='5' limit ($part*3),$part;
 

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson