Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / хранение Select запросов в базе / 25 сообщений из 51, страница 1 из 3
09.09.2013, 22:43:36
    #38391561
Dozent
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранение Select запросов в базе
Здраствуйте, у меня такой вопрос, возможно ли в базе MySQL хранить запросы на выборку ввиде хранимых процедур? И если да, то как они обрабатываются?
...
Рейтинг: 0 / 0
09.09.2013, 22:49:44
    #38391568
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранение Select запросов в базе
VIEW
Подойдет?
...
Рейтинг: 0 / 0
09.09.2013, 22:50:58
    #38391569
Dozent
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранение Select запросов в базе
мб, а ещё есть что нибудь есть? например на русском?)
...
Рейтинг: 0 / 0
10.09.2013, 05:15:24
    #38391641
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранение Select запросов в базе
Dozent, лучше подучите английский. Серьёзно.
Ну и насчёт именно ХП читайте здесь .
...
Рейтинг: 0 / 0
10.09.2013, 05:18:01
    #38391642
javajdbc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранение Select запросов в базе
tanglirDozent, лучше подучите английский. Серьёзно.
Ну и насчёт именно ХП читайте здесь .

ну что-то вроде есть и на русском:

http://www.opennet.ru/docs/RUS/mysqlpro/sto_proc.html
...
Рейтинг: 0 / 0
10.09.2013, 05:31:16
    #38391643
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранение Select запросов в базе
javajdbc, для 5.5 уже не катит: авторИнструкции SIGNAL и RESIGNAL в настоящее время не обеспечиваются.Причём понять, что это мануал по 5.1, сходу не удастся - придётся полистать оглавление :)
...
Рейтинг: 0 / 0
10.09.2013, 09:37:03
    #38391741
Dozent
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранение Select запросов в базе
Спасибо за ссылки, посмотрел, конечно можно и прям в процедурах хранить выборку и в View таблицах, но и тут и там не учитывается одно, что условие после WHERE может быть разным и перечислять все входящие параметры, по крайней мере долго и всё равно можешь не предугадать...
Ну или передавать строку с готовым условием, но это не правильно насколько я могу себе это представить...

Поэтому всё таки останавливаюсь на хранении Select`ов в клиенте, там же будет динамически собираться условие для выборки, мне кажется так будит намного удобнее..

Если я абсолютно не прав и селекты можно хранить в процедурах с условие что строка после WHERE собирается динамически, то пожалуйста поделитесь...
...
Рейтинг: 0 / 0
10.09.2013, 11:24:50
    #38391893
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранение Select запросов в базе
Dozent,

Процедуры есть в мускле с кажется 5 ой версии. Нормально работают.

Как обрабатываются — не очень понятный вопрос, создашь процедуру, в ней — запросы, select, можно несколько, вызываешь с помощью call, получаешь один или несколько наборов данных, также возможны входные и выходные параметры.
...
Рейтинг: 0 / 0
10.09.2013, 11:30:52
    #38391901
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранение Select запросов в базе
Dozent,

Поэтому всё таки останавливаюсь на хранении Select`ов в клиенте, там же будет динамически собираться условие для выборки, мне кажется так будит намного удобнее..

Не будет, уж проверь на слово.

А что касается динамического формирования текста запросов — лучше не надо так делать, про многим причинам.
Лучше напиши генераторы процедур.

Я вот тут недавно на cheetah такой наваял — очень классно.
...
Рейтинг: 0 / 0
10.09.2013, 11:34:09
    #38391913
Dozent
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранение Select запросов в базе
MasterZivDozent,

Поэтому всё таки останавливаюсь на хранении Select`ов в клиенте, там же будет динамически собираться условие для выборки, мне кажется так будит намного удобнее..

Не будет, уж проверь на слово.

А что касается динамического формирования текста запросов — лучше не надо так делать, про многим причинам.
Лучше напиши генераторы процедур.

Я вот тут недавно на cheetah такой наваял — очень классно.

По каким причинам? Неужели есть ещё лучшая реализация чем хранить код запроса на выборку в клиенте?

Присвоил запрос со всеми полями и джойнами переменой а потом по необходимости по условиям собарл
...
Рейтинг: 0 / 0
10.09.2013, 11:34:51
    #38391915
Dozent
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранение Select запросов в базе
собрал, sql:= conssql+ 'where' + filter;
...
Рейтинг: 0 / 0
10.09.2013, 11:35:58
    #38391919
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранение Select запросов в базе
Dozent,

Код: sql
1.
2.
3.
4.
create view myView as
select t1.*, t2.desc
from t1
join t2 on t2.id_t1=t1.id;

Код: sql
1.
2.
3.
select *
from myView v
where v.desc like 'пример%';
...
Рейтинг: 0 / 0
10.09.2013, 12:04:47
    #38391978
Dozent
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранение Select запросов в базе
Cygapb-007Dozent,

Код: sql
1.
2.
3.
4.
create view myView as
select t1.*, t2.desc
from t1
join t2 on t2.id_t1=t1.id;

Код: sql
1.
2.
3.
select *
from myView v
where v.desc like 'пример%';



Ну создам я View таблицу мне всё равно нужно селект к ней делать!
Ну вот смотрите у меня на форме есть таблица которая отображает запросом Select c 15 полями из 9 таблиц, обьединёные джойнами.
На форме возможно фильтрация по фамилии, дате рождения и ещё нескольким условиям...
Захочет пользователь взять дату рождения, дату визита и ещё какоенить условие и в клиенте буду собирать строку фильтра

Код: pascal
1.
2.
3.
4.
5.
if a<>0 then Filter:=Filter + '@param1'
if b<>0 then Filter:=Filter + '@param2'
if c<>0 then Filter:=Filter + '@param3'

if Length(Filter)>0 then BaseSQL:=BaseSQL+ ' WHERE ' + Filter;



Что то в этом роде или допустим ещё какието криетрии, в коде будет собиратся полный SQL запрос.
Я же хотел реализовать хранения запроса на выборку в базе ввиде процедуры. чтобы сделать
Код: sql
1.
Call proc_name(param1, param2, param3);


но понял что мне в процедуре придётся писать заранее
Код: sql
1.
2.
...
Where id_cl= param1 and visit=param2 and ещё что то


и допустим для какойто выборке не нужна половина параметров как быть? если передавать null возможно что результат будет не правильный...
Вот почему я решил реализовать состовление запроса в коде, мне кажется так удобнее, повторюсь если я не правильно что то поинмаю поясните, подскажите если вам не трудно...
...
Рейтинг: 0 / 0
10.09.2013, 12:05:05
    #38391979
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранение Select запросов в базе
DozentMasterZivDozent,

Поэтому всё таки останавливаюсь на хранении Select`ов в клиенте, там же будет динамически собираться условие для выборки, мне кажется так будит намного удобнее..

Не будет, уж проверь на слово.

А что касается динамического формирования текста запросов — лучше не надо так делать, про многим причинам.
Лучше напиши генераторы процедур.

Я вот тут недавно на cheetah такой наваял — очень классно.

По каким причинам? Неужели есть ещё лучшая реализация чем хранить код запроса на выборку в клиенте?

Присвоил запрос со всеми полями и джойнами переменой а потом по необходимости по условиям собарл

Есть. И их много. Сейчас укажу только главную — если нашел ошибку в запросе, её можно исправить в одном месте и не пересобирать клиента.
...
Рейтинг: 0 / 0
10.09.2013, 12:16:09
    #38392007
Dozent
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранение Select запросов в базе
Можно хранить запросы в ресурсном файле... Но я не хочу так делать...
...
Рейтинг: 0 / 0
10.09.2013, 12:26:42
    #38392032
Dozent
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранение Select запросов в базе
Хотя, я возможно имею не правильное представление, к этому клиенту на Delphi ещё добавится некая веб морда, правда пока смутно представляю как её реализовать... там тоже как-то нужно будет хранить селекты...
...
Рейтинг: 0 / 0
10.09.2013, 14:07:42
    #38392229
Dozent
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранение Select запросов в базе
В очередной раз убеждаюсь, что очень сложно обьяснить людям свою проблему ибо каждый смотрит посвойму...

Постараюсь объяснить по другому, объясню ход своих мыслей:
Будет клиент на Делфи,а так же есть вероятность что надо будет сделать веб приложение, чтобы всё это же работало через браузер (как реализовывать это пока незнаю, пока нет точной позиции)
Ну вот я подумал зачем я буду сначало в делфи клиенте писать эти запросы, потом ещё гденить...
Решил реализовать в базе... Сделал такую процедуру

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
DELIMITER $$

USE `hairsalon`$$

DROP PROCEDURE IF EXISTS `work_select`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `work_select`(IN id INT(11))
BEGIN
  SELECT 
worktab.id_w AS id_w,
worktab.id_cl AS id_cl,
worktab.id_sotr AS id_sotr,
worktab.id_srv AS id_srv,
worktab.id_hc_old AS id_hc_old,
worktab.id_hl_old AS id_hl_old,
worktab.id_hc AS id_hc,
worktab.id_hl AS id_hl,
worktab.visit AS visit,
worktab.id_item AS id_item,
worktab.flag_end AS flag_end,
worktab.suma AS suma,
clienttab.fio AS cfio,
haircolortab.name_color AS name_color,
hairlntab.name_ln AS name_ln,
haircolortab_old.name_color AS name_color_old,
hairlntab_old.name_ln AS name_ln_old,
itemstab.name_item AS name_item,
worktab.item_count AS item_count,
servicetab.name_srv AS name_srv,
sotrtab.fio AS sfio
FROM 
`hairsalon`.`work` worktab
LEFT OUTER JOIN  `hairsalon`.`client` clienttab           ON worktab.id_cl = clienttab.id_cl
LEFT OUTER JOIN  `hairsalon`.`haircolor` haircolortab     ON worktab.id_hc = haircolortab.id_hc
LEFT OUTER JOIN  `hairsalon`.`hairln` hairlntab           ON worktab.id_hl = hairlntab.id_hl
LEFT OUTER JOIN  `hairsalon`.`haircolor` haircolortab_old ON worktab.id_hc_old = haircolortab_old.id_hc
LEFT OUTER JOIN  `hairsalon`.`hairln` hairlntab_old       ON worktab.id_hl_old = hairlntab_old.id_hl
LEFT OUTER JOIN  `hairsalon`.`items` itemstab             ON worktab.id_item = itemstab.id_item
LEFT OUTER JOIN  `hairsalon`.`service` servicetab         ON worktab.id_srv = servicetab.id_srv
LEFT OUTER JOIN  `hairsalon`.`sotr` sotrtab               ON worktab.id_sotr = sotrtab.id_sotr
WHERE worktab.id_w= id;
    END$$

DELIMITER ;



Подумал, классно! Но тут понял что конечно передать один параметр это не сложно, а как быть если в условии выборке должны будут участвовать несколько? придётся каждый писать и выглядеть это будет примерно так

WHERE worktab.id_w= id AND worktab.id_sotr=ids AND worktab.flag_end=1; или допустим просто clienttab.fio like'петя%'

получается надо будет делать все входящие параметры! Получается мне надо либо собирать строку условия фильтрации в клиенте и передавать её сюда подумал я(но сразу же отказался от этой идеи), либо както это делать в самой процедуре (но как незнаю) на данный момент самый хороший выход для меня это формировать запрос полностью в коде... Но если вы подскажите как правильно сделать в процедуре на сервере буду очень благодарен и тут же попутный вопрос, не изобретаю ли я велосипед или не делаю ли я что-то бредовое? Если да, то как нужно правильно сделать?
...
Рейтинг: 0 / 0
10.09.2013, 14:31:50
    #38392285
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранение Select запросов в базе
DozentБудет клиент на Делфи,а так же есть вероятность что надо будет сделать веб приложение, чтобы всё это же работало через браузер (как реализовывать это пока незнаю, пока нет точной позиции)
Ну вот я подумал зачем я буду сначало в делфи клиенте писать эти запросы, потом ещё гденить...


Так тем более, процедуры тут как раз то, что надо. Они хранятся один раз, в БД, в удобном месте.

DozentПодумал, классно! Но тут понял что конечно передать один параметр это не сложно, а как быть если в условии выборке должны будут участвовать несколько? придётся каждый писать и выглядеть это будет примерно так

получается надо будет делать все входящие параметры! Получается мне надо либо собирать строку условия фильтрации в клиенте и передавать её сюда подумал я(но сразу же отказался от этой идеи), либо както это делать в самой процедуре (но как незнаю) на данный момент самый хороший выход для меня это формировать запрос полностью в коде... Но если вы подскажите как правильно сделать в процедуре на сервере буду очень благодарен и тут же попутный вопрос, не изобретаю ли я велосипед или не делаю ли я что-то бредовое? Если да, то как нужно правильно сделать?

Почему ты хочешь всё сделать в ОДНОЙ процедуре ?
Сделай их много, 10, 20, 40. На все случаи жизни. На каждый набор параметров. Хотя я уверен, что вменяемых критериев поиска у тебя будет не более 5-10. Но если будет больше -- сделай их хоть 100. В чём проблема ?
...
Рейтинг: 0 / 0
10.09.2013, 14:34:07
    #38392293
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранение Select запросов в базе
DozentНо если вы подскажите как правильно сделать в процедуре на сервере буду очень благодарен и тут же попутный вопрос, не изобретаю ли я велосипед или не делаю ли я что-то бредовое? Если да, то как нужно правильно сделать?

Это тоже можно, это называется dynamic exec, кажется, есть оно и в mySQL, идея в том, чтобы в текстовой переменной собрать текст запроса, а затем его выполнить.

Но это сложно, это чревато многими проблемами, и так лучше не делать. Лучше просто написать 10 процедур.
...
Рейтинг: 0 / 0
10.09.2013, 14:37:13
    #38392300
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранение Select запросов в базе
...
Рейтинг: 0 / 0
10.09.2013, 14:42:49
    #38392316
Dozent
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранение Select запросов в базе
Спасибо, буду читать!!!
...
Рейтинг: 0 / 0
10.09.2013, 15:05:12
    #38392361
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранение Select запросов в базе
Ещё раз: почему бы не сделать VIEW с одним селектом (указанным в процедуре) и без WHERE?

А потом формировать условия фильтрации и включать их в запрос
Код: sql
1.
2.
select * from myView
WHERE ...

DozentНу создам я View таблицу мне всё равно нужно селект к ней делать!VIEW — это не таблица, это некий аналог вложенного подзапроса, со всеми вытекающими следствиями (индексы, план выполнения, актуальность данных, блокировки и т.п.).
...
Рейтинг: 0 / 0
10.09.2013, 15:07:35
    #38392367
Dozent
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранение Select запросов в базе
Где-то вычитал вчера, что они тормозят...
...
Рейтинг: 0 / 0
10.09.2013, 15:19:23
    #38392386
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранение Select запросов в базе
DozentГде-то вычитал вчера, что они тормозят...Тормозят неоптимизированные запросы, а не view.
...
Рейтинг: 0 / 0
10.09.2013, 15:23:30
    #38392391
Dozent
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранение Select запросов в базе
Cygapb-007, но всё равно мне нужно будет вытягивать данные из View запросом. так?
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / хранение Select запросов в базе / 25 сообщений из 51, страница 1 из 3
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]