вопрос знатокам mysql

12
M
На сайте с 20.08.2004
Offline
376
887

есть таблица точек, из нее получаю _id_gr айди графика, и количество точек на этом графике - qty

select gr_id, count(point_id) qty from bt_gr_point group by gr_id

можно ли одним запросом как то записать данные в таблицу gr , в поле points_qty?

спасибо.

отец сыночка, лапочки дочки и еще одного сыночка
jozzeff
На сайте с 18.07.2010
Offline
4
#1

futuristian,

если вот так для примера:

INSERT INTO users (id, c_id, n, u_id) VALUES((SELECT MAX(id)+1 FROM Table1 as e WHERE var='10'), '25', '1', '10');

То есть, я к тому, чтобы записывать, а уж как второй запрос - выбирать из таблицы.

как-то так.

PHP-MySQL — профессионально разрабатываю приложения (скрипты) (/ru/forum/523032) jozzeff.ru (http://www.jozzeff.ru) Нужна простенькая и очень недорогая CMS? (http://www.jozzeff.ru/2010/08/08/mini-cms/)
[umka]
На сайте с 25.05.2008
Offline
456
#2

insert into gr (gr_id, points_qty) select gr_id, count(point_id) qty from bt_gr_point group by gr_id
? :)

Лог в помощь!
M
На сайте с 20.08.2004
Offline
376
#3

я немного ошибся

я говорил об update

но я думаю что нельзя.

спасибо.

edogs software
На сайте с 15.12.2005
Offline
775
#4
Miracle:
есть таблица точек, из нее получаю _id_gr айди графика, и количество точек на этом графике - qty
select gr_id, count(point_id) qty from bt_gr_point group by gr_id

можно ли одним запросом как то записать данные в таблицу gr , в поле points_qty?

спасибо.

Нечто вроде


update gr set points_qty=(
select count(bt_gr_point.point_id) from bt_gr_point
where bt_gr_point.gr_id=gr.gr_id
group by bt_gr_point.gr_id
)

если исходить из того, что в таблице gr поле тоже gr_id называется, а если нет, то соответственно gr.gr_id подправить на нужное.

Разработка крупных и средних проектов. Можно с криптой. Разумные цены. Хорошее качество. Адекватный подход. Продаем lenovo legion в спб, дешевле магазинов, новые, запечатанные. Есть разные. skype: edogssoft
M
На сайте с 20.08.2004
Offline
376
#5

Спасибо за ответ. Попробую, хотя не верил в решение исделал реализацию на пхп.

Теперь вопрос в другом, надо обновить большое количество записей.

Ясное дело что смысл делать через отдельный update нет, я все сгруппировал, но возникладругая проблема, вот после таки условий update .... where id=1 || id=2 ... id=3000 у меня очень сильно виснет маэскуэль, правда намоей локальной машине, не положит ли этот скрипт сервер?

Что можно сделать в данном случае, или поможет только разбивка?

[Удален]
#6

Miracle, where id in (1,2,3,4,5,6,7,8,9,10...) :)

bearman добавил 02.08.2010 в 13:19

+ возможно нет индекса по колонке id, если таблица содержит много записей, то эти условия будут долго применять (id =1 || id =2 || id=3..)

bearman добавил 02.08.2010 в 13:22

и я ступил, сразу не сказал, если я не ошибаюсь, то при OR индексы не используются. происходит фул скан + такая куча ифов. по крайней мере в селекте аля select * from users where username='wow' or username='wow1' выгоднее писать select * from users where username='wow' union select * from users where username='wow1' :) потому что второй вариант будет юзать индексы. на больших таблицах это критично :)

M
На сайте с 20.08.2004
Offline
376
#7
bearman:
where id in (1,2,3,4,5,6,7,8,9,10...)

спасибо. а я блин и не догадался.

[Удален]
#8

Miracle, бывает :)

N
На сайте с 06.05.2007
Offline
419
#9
bearman:
если я не ошибаюсь, то при OR индексы не используются.

хватит врать. если все OR по одному столбцу, скорее будет использоваться чем нет.

точно сказать нельзя пока не известна статистика индексов.

IN(<список значений>) конечно удобнее для программиста.

Кнопка вызова админа ()
M
На сайте с 20.08.2004
Offline
376
#10
netwind:
точно сказать нельзя пока не известна статистика индексов.

а что такое статистика индекса?

поле gr_id индексируемое, автоинкриментируемое ...

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий