|
view с параметром
|
|||
---|---|---|---|
#18+
никак не могу понять, как правильно реализовать одну вещь проблема возникает достаточно часто, поэтому приведу абстактный пример: предположим есть таблица остатков на складе (store) следущего вида: version integer - версия (ну скажем дата) name varchar(10) - название value integer - значение необходимо получить разницу между двумя версиями (что изменилось): select name, old.value, new.value from store as old outer join store as new using (name) where old.version=.... and new.version=.... and old.cnt<>new.cnt и результат использовать в других запросах. повторюсь - пример абстрактный, потребность в чем-то подобном возникает часто. другой пример - собрать статистику по какому-то фильтру (период данных, клиент и т.д.). то есть входные данные ограничиваются с помощью каких-либо параметров, получаем большой набор данных и строим сложный запрос на их основе я вижу 3 способа реализации: - создавать view. способ наиболее симпатичный, но параметры в view заданы жестко, придется динамически пересоздавать view для нужных параметров (могут возникнуть проблемы с параллельной работой нескольких клиентов и вообще некрасиво) - делать prepare и execute. способ неплохой, но prepare придется делать заново в каждой сессии, нельзя будет использовать результаты в другом view - написать sql-функцию. этот вариант не нравится тем, что плохо дружит с оптимизатором (если мы используем результат этой функции в запросе, то оптимизатор не объединяет их в один как в случае с view); кроме того у меня есть подозрение, что функции не рассчитаны на большие объемы и будут тормозить в случае больших наборов результирующих данных такое впечатление, что я делаю что-то не то и не так, что называется изобретаю велосипед с квадратными колесами ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2004, 21:40 |
|
|
start [/forum/topic.php?fid=53&msg=32572742&tid=2007801]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
40ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
others: | 339ms |
total: | 459ms |
0 / 0 |