Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Вниз

Можно ли сделать такой интерестный select?   Найти похожие ветки 

 
SergP ©   (2004-04-09 21:53) [0]

БД MySQL
В таблице имеется поле типа memo
Можно ли сделать запрос, чтобы в результате получить набор записей c таким кол-вом записей чтобы сумма длин (length) выбранных записей этого поля была максимальной, но не превышала определенного значения?

если да, то как?


 
SergP ©   (2004-04-09 21:53) [0]

БД MySQL
В таблице имеется поле типа memo
Можно ли сделать запрос, чтобы в результате получить набор записей c таким кол-вом записей чтобы сумма длин (length) выбранных записей этого поля была максимальной, но не превышала определенного значения?

если да, то как?


 
Nikolay M. ©   (2004-04-09 22:56) [1]

Нельзя. Придется решать задачу оптимизации, так же известной как задача о рюкзаке.


 
Nikolay M. ©   (2004-04-09 22:56) [1]

Нельзя. Придется решать задачу оптимизации, так же известной как задача о рюкзаке.


 
SergP ©   (2004-04-09 23:15) [2]

Пардон, неправильно сформулировал вопрос.
имеется ввиду не совсем задача оптимизации.
Т.е. имелось ввиду не оптимизация, а некоторое подобие LIMIT"а, типа выбираются записи пока суммарная длина записей заданного поля не превысит допустимую.


 
SergP ©   (2004-04-09 23:15) [2]

Пардон, неправильно сформулировал вопрос.
имеется ввиду не совсем задача оптимизации.
Т.е. имелось ввиду не оптимизация, а некоторое подобие LIMIT"а, типа выбираются записи пока суммарная длина записей заданного поля не превысит допустимую.


 
Nikolay M. ©   (2004-04-09 23:28) [3]

Тоже нет. Во всяком случае не в мускуле. Слишком уж там SQL покоцаный.
В аксессе, MS SQL - думаю, что реально. По крайней мере в голове вроде складывается. Но в MySQL забудь делать такие вещи одним запросом.


 
Nikolay M. ©   (2004-04-09 23:28) [3]

Тоже нет. Во всяком случае не в мускуле. Слишком уж там SQL покоцаный.
В аксессе, MS SQL - думаю, что реально. По крайней мере в голове вроде складывается. Но в MySQL забудь делать такие вещи одним запросом.


 
RayRom ©   (2004-04-10 21:41) [4]

Nikolay M. ©   (09.04.04 23:28) [3]

> Слишком уж там SQL покоцаный

Любой язык портит навороченнность
Я работаю, накаких проблем, а для вывода мона использвать
функцию определения длины в условии запроса если длинна значения больше определенного то выводить к примеру строку "слишком много мусора" или т.п.


 
RayRom ©   (2004-04-10 21:41) [4]

Nikolay M. ©   (09.04.04 23:28) [3]

> Слишком уж там SQL покоцаный

Любой язык портит навороченнность
Я работаю, накаких проблем, а для вывода мона использвать
функцию определения длины в условии запроса если длинна значения больше определенного то выводить к примеру строку "слишком много мусора" или т.п.


 
SergP ©   (2004-04-11 01:21) [5]

2 RayRom ©   (10.04.04 21:41)

и как это сделать? Может приведешь пример?

Допустим есть 2 поля: id и text (text - типа  memo)
Нужно сделать так:
select id, text from table order by id (далее нечто похожее на LIMIT, только LIMIT выбирает определенное (указанное) число записей, а мне нужно такое чтобы как только общая сумма length(text) по выбранным записям превысит нужное значение, чтобы выбирание записей на этом закончилось)


 
SergP ©   (2004-04-11 01:21) [5]

2 RayRom ©   (10.04.04 21:41)

и как это сделать? Может приведешь пример?

Допустим есть 2 поля: id и text (text - типа  memo)
Нужно сделать так:
select id, text from table order by id (далее нечто похожее на LIMIT, только LIMIT выбирает определенное (указанное) число записей, а мне нужно такое чтобы как только общая сумма length(text) по выбранным записям превысит нужное значение, чтобы выбирание записей на этом закончилось)


 
Nikolay M. ©   (2004-04-11 13:07) [6]


> SergP ©   (11.04.04 01:21) [5]
> Допустим есть 2 поля: id и text (text - типа  memo)
> Нужно сделать так:
> select id, text from table order by id

Для СУБД, поддерживающих подзапросы, делается элементарно: к этому запросу добавляется условие
HAVING some_limit < (SELECT sum(length(text)) FROM table AS table_2 WHERE table_2.id <= table.id)
но в мускуле, повторюсь, такое невозможно. По крайней мере, на тех версиях, на которых работал я. Поскольку я от него уже отошел, возможно, уже вышла какая-нибудь 5-я версия, в которой подзапросы поддерживаются.


 
Nikolay M. ©   (2004-04-11 13:07) [6]


> SergP ©   (11.04.04 01:21) [5]
> Допустим есть 2 поля: id и text (text - типа  memo)
> Нужно сделать так:
> select id, text from table order by id

Для СУБД, поддерживающих подзапросы, делается элементарно: к этому запросу добавляется условие
HAVING some_limit < (SELECT sum(length(text)) FROM table AS table_2 WHERE table_2.id <= table.id)
но в мускуле, повторюсь, такое невозможно. По крайней мере, на тех версиях, на которых работал я. Поскольку я от него уже отошел, возможно, уже вышла какая-нибудь 5-я версия, в которой подзапросы поддерживаются.


 
RayRom ©   (2004-04-11 16:45) [7]

Да подзапросы только в версии 4.1.х будут а в версиях 4.0.х (с 4.0.17 работаю) только union добавили.
Единственно ты можеш сделать ограничение на единоразовую передачу пакета данных с сервера указав в опциях сервера.

У мя проблема вознила когда я стал фотографии размером в 2М кидать в поля Мемо, ну сервак ругается, пришлось в инфу лесть, ну и оказалась что ограничения пакета на передачу на сервак был 1М пришлось увеличить до 8М.
Правда немного не в тему ну может получится найдеш по твоему вопросу.


 
RayRom ©   (2004-04-11 16:45) [7]

Да подзапросы только в версии 4.1.х будут а в версиях 4.0.х (с 4.0.17 работаю) только union добавили.
Единственно ты можеш сделать ограничение на единоразовую передачу пакета данных с сервера указав в опциях сервера.

У мя проблема вознила когда я стал фотографии размером в 2М кидать в поля Мемо, ну сервак ругается, пришлось в инфу лесть, ну и оказалась что ограничения пакета на передачу на сервак был 1М пришлось увеличить до 8М.
Правда немного не в тему ну может получится найдеш по твоему вопросу.


 
SergP ©   (2004-04-11 17:10) [8]

ну я понял что нельзя сделать так как я хочу. Но вот как поступить лучше?
Хочу сделать ограничение допустим приблизительно в 200Кб. (особая точность не требуется, погрешность в несколько Kб особой роли играть не будет)
Вобщем мне нужно из таких записей "засунуть" данные в переменную, но так как содержимое мемо полей может у разных записей быть очень разным (от нескольких байт, до нескольких десятков Кб), нужно ограничить ее размер.
Пока вижу такие варианты:
Делаю запрос на N записей (LIMIT N), затем перебирая полученые записи закидываю все в переменную пока либо не не пройду все записи, либо длина переменной не превысит допустимую. Если после прохождения всех записей длина переменной не достигла нужного значения, то делаю новый аналогичный запрос, но уже таким образом чтобы выбирались следующие записи и т.д.

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

Какой вариант лучше в плане уменьшения нагрузки на сервер? (кстати это серверная часть проги и пишу я ее на PHP, извиняюсь конечно что это не совсем имеет отношение к Delphi)


 
SergP ©   (2004-04-11 17:10) [8]

ну я понял что нельзя сделать так как я хочу. Но вот как поступить лучше?
Хочу сделать ограничение допустим приблизительно в 200Кб. (особая точность не требуется, погрешность в несколько Kб особой роли играть не будет)
Вобщем мне нужно из таких записей "засунуть" данные в переменную, но так как содержимое мемо полей может у разных записей быть очень разным (от нескольких байт, до нескольких десятков Кб), нужно ограничить ее размер.
Пока вижу такие варианты:
Делаю запрос на N записей (LIMIT N), затем перебирая полученые записи закидываю все в переменную пока либо не не пройду все записи, либо длина переменной не превысит допустимую. Если после прохождения всех записей длина переменной не достигла нужного значения, то делаю новый аналогичный запрос, но уже таким образом чтобы выбирались следующие записи и т.д.

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

Какой вариант лучше в плане уменьшения нагрузки на сервер? (кстати это серверная часть проги и пишу я ее на PHP, извиняюсь конечно что это не совсем имеет отношение к Delphi)


 
Nikolay M. ©   (2004-04-12 09:43) [9]


> Делаю запрос на N записей (LIMIT N), затем перебирая полученые
> записи закидываю все в переменную пока либо не не пройду
> все записи, либо длина переменной не превысит допустимую.
> Если после прохождения всех записей длина переменной не
> достигла нужного значения, то делаю новый аналогичный запрос,
> но уже таким образом чтобы выбирались следующие записи и
> т.д.
>
> Есть вариант такой: сделать один запрос но с заведомо большим
> числом N и пройтись по ним пока они не закончатся или пока
> длинна переменной не достигнет установленого максимума,
> после чего на этом и остановится.
>
> Какой вариант лучше в плане уменьшения нагрузки на сервер?

Ну, понимаешь, статистику по данным в этом поле надо поднять и найти оптимальные N для обоих вариантов, а потом уже и смотреть. По сетке данные у тебя, скорее всего не гоняются (если веб-сервер = сервер MySQL). Я бы особо не мудрил, оставил первый вариант, только с параметром N все-таки поигрался бы: собрать разные типы запросов к серверу, выполнить их и подсчитать средневзвес N получаемых сумм нужного поля. Его и можно брать как LIMIT N.


 
Nikolay M. ©   (2004-04-12 09:43) [9]


> Делаю запрос на N записей (LIMIT N), затем перебирая полученые
> записи закидываю все в переменную пока либо не не пройду
> все записи, либо длина переменной не превысит допустимую.
> Если после прохождения всех записей длина переменной не
> достигла нужного значения, то делаю новый аналогичный запрос,
> но уже таким образом чтобы выбирались следующие записи и
> т.д.
>
> Есть вариант такой: сделать один запрос но с заведомо большим
> числом N и пройтись по ним пока они не закончатся или пока
> длинна переменной не достигнет установленого максимума,
> после чего на этом и остановится.
>
> Какой вариант лучше в плане уменьшения нагрузки на сервер?

Ну, понимаешь, статистику по данным в этом поле надо поднять и найти оптимальные N для обоих вариантов, а потом уже и смотреть. По сетке данные у тебя, скорее всего не гоняются (если веб-сервер = сервер MySQL). Я бы особо не мудрил, оставил первый вариант, только с параметром N все-таки поигрался бы: собрать разные типы запросов к серверу, выполнить их и подсчитать средневзвес N получаемых сумм нужного поля. Его и можно брать как LIMIT N.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.52 MB
Время: 0.058 c
3-1081763481
romeo
2004-04-12 13:51
2004.05.09
BDE, сволочь, вообще не хочет работать по локальной сети


1-1082963788
bon
2004-04-26 11:16
2004.05.09
TToolBar


3-1081343780
YurikGl
2004-04-07 17:16
2004.05.09
DBExpres Проблемы SQLStoredProc


4-1079462693
Александр Григоренко
2004-03-16 21:44
2004.05.09
Выравнивание в ComboBox при помощи API


1-1082297859
killer
2004-04-18 18:17
2004.05.09
сравнение двух символов...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский