Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: sql выборка с лимитом по where

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
duhon
Отправлено: 24 Марта, 2014 - 11:46:33
Post Id



Гость


Покинул форум
Сообщений всего: 72
Дата рег-ции: Нояб. 2011  


Помог: 5 раз(а)




условно есть таблица документов c полями
id, category, name, status

нужно написать sql запрос на выборку документов по 10 из каждой категории для status ='active'.

Сделать выбор всех документов а потом удалить в каждой категории лишние записи неподходит, так в таблице очень много данных (даже count по категории зависает на пару часов).

Также могу решить эту проблему на другом языке, сделал 100 запросов (тоесть для каждой категории по запросу), а потом это все склеить. Но хотелосьбы обычным sql решить

З.Ы. mysql, innodb
оталикивался от запрса select * from document where category in (1,2,3,4,5) and status = 'active' limit 10; но лимит правильно поставить для каждой категории незнаю как

(Отредактировано автором: 24 Марта, 2014 - 12:00:59)

 
 Top
T1grOK
Отправлено: 24 Марта, 2014 - 13:50:41
Post Id



Частый гость


Покинул форум
Сообщений всего: 129
Дата рег-ции: Июнь 2013  


Помог: 7 раз(а)




duhon пишет:
даже count по категории зависает на пару часов

Не понял Это ж насколько должен быть слабым тазик или огромной БД, чтоб озадачиться на такое время?!

А по теме. Выбрать категории и в цикле выбрать по 10 документов из каждой.


-----
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
 
 Top
Мелкий Супермодератор
Отправлено: 24 Марта, 2014 - 14:23:37
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Не встречал пока изящных и эффективных решений таких задач.

Дёшево и сердито - объедините в union кучку запросов, они же однотипные.


-----
PostgreSQL DBA
 
 Top
DlTA
Отправлено: 24 Марта, 2014 - 15:01:34
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




duhon пишет:
даже count по категории зависает на пару часов
а можно пример этого запроса, который выполняется из phpMyAdmin?

и может подумать о переводе на MyISAM ?!
http://www[dot]opennet[dot]ru/tips/1958_[dot][dot][dot]sam_innodb[dot]shtml
 
 Top
duhon
Отправлено: 24 Марта, 2014 - 16:33:52
Post Id



Гость


Покинул форум
Сообщений всего: 72
Дата рег-ции: Нояб. 2011  


Помог: 5 раз(а)




select count(*) from document where category = 29;
вернуло 5 милионов записей. И таких категорий около 100.
Я правда сильно преувеличил, count наверно выполняется меньше часа, просто я банально приконектился к выделенному серверу БД, сделал запрос, 10 минут ответа нету, завершаю запрос, делаю експлейн, убеждаюсь что цепляю индексы, делаю count по одной категории, жду 10 минут, результата еще нету, отконекчиваюсь, через пару часов вспомню про запрос, опять конекчусь, и о чудо 5 миллионов только в одной категории. А мне по сути надо мизер что бы залить в тестовую базу.

З.Ы. А по поводу смены/оптимизации базы/сервера это все не в моей компетенции, этим у нас занимаются админы. Просто я ждал ответ в виде for или что нибудь этакого sql-ного, чисто раде повышение скила.

З.Ы.Ы транзакционнасть нужна поэтому innodb, и имхо тормозит потому что каждую миниту транзакционно добавляються/обновляються пару документов.
 
 Top
Мелкий Супермодератор
Отправлено: 24 Марта, 2014 - 18:44:05
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




DlTA пишет:
и может подумать о переводе на MyISAM ?!

Чтобы оно крэшилось просто by design и идти в даунтайм на repair на пару суток на каждый чих?

duhon пишет:
Просто я ждал ответ в виде for или что нибудь этакого sql-ного, чисто раде повышение скила.

Смотрите stored procedure


-----
PostgreSQL DBA
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB