Personal Video Database
Русский => Разработчикам => Скрипты, Плагины, Шаблоны и Шкурки => Тема начата: moran от 07 Мая 2009, 04:12:12
-
В прикрепленных файлах находятся скрипты процедур, которые необходимо открыть в редакторе скриптов в любом менеджере баз Firebird. Выполняем скрипт, в базе появляется соответствующая процедура, выполнив которую можно получить соответствующий результат.
p.s. Предлагайте свои алгоритмы для всяческих задач. А там посмотрим что из этого выйдет...
1. Процедура отмечающая все фильмы где нет постера, в виде метки используется пользовательское поле, с произвольным текстом
SET TERM ^ ;
CREATE OR ALTER PROCEDURE USER_MARK_POSTERS (
value_text varchar(100),
cmfid_id integer)
as
begin
/*$$IBEC$$ ПОСТЕРЫ $$IBEC$$*/
INSERT INTO
CUSTOM_VALUES_SHORTSTR
("cmfid", "mid", "value")
SELECT
:CMFID_ID as "cmfid", "mid", :VALUE_TEXT as "value"
FROM
MOVIES
WHERE
"mid" NOT IN (SELECT "mid" FROM CUSTOM_VALUES_SHORTSTR WHERE "cmfid" = :CMFID_ID AND "value" = :VALUE_TEXT) AND
"visible" = -1 AND "epid" is NULL AND
(NOT EXISTS(SELECT FIRST 1 * FROM IMAGES WHERE ("mid" = MOVIES."mid") AND ("imgtype" = 0)));
DELETE FROM
CUSTOM_VALUES_SHORTSTR
WHERE
("cmfid" = :CMFID_ID) AND ("value" = :VALUE_TEXT) and
(EXISTS(SELECT FIRST 1 * FROM IMAGES WHERE ("mid" = CUSTOM_VALUES_SHORTSTR."mid") AND ("imgtype" = 0)));
suspend;
end^
SET TERM ; ^
COMMENT ON PROCEDURE USER_MARK_POSTERS IS
'Процедура отмечающая все фильмы где нет постера, в виде метки используется пользовательское поле, с произвольным текстом';
DESCRIBE PARAMETER VALUE_TEXT PROCEDURE USER_MARK_POSTERS
'Текст вносимый в пользовательское поле';
DESCRIBE PARAMETER CMFID_ID PROCEDURE USER_MARK_POSTERS
'ID пользовательского поля в которое вносим значение VALUE_TEXT';
GRANT SELECT,INSERT,DELETE ON CUSTOM_VALUES_SHORTSTR TO PROCEDURE USER_MARK_POSTERS;
GRANT SELECT ON MOVIES TO PROCEDURE USER_MARK_POSTERS;
GRANT SELECT ON IMAGES TO PROCEDURE USER_MARK_POSTERS;
GRANT EXECUTE ON PROCEDURE USER_MARK_POSTERS TO SYSDBA;
2. Процедура отмечающая все фильмы где нет скриншотов, в виде метки используется пользовательское поле, с произвольным текстом
SET TERM ^ ;
CREATE OR ALTER PROCEDURE USER_MARK_SCREENSHOTS (
value_text varchar(100),
cmfid_id integer)
as
begin
/*$$IBEC$$ СКРИНШОТЫ $$IBEC$$*/
INSERT INTO
CUSTOM_VALUES_SHORTSTR
("cmfid", "mid", "value")
SELECT
:CMFID_ID as "cmfid", "mid", :VALUE_TEXT as "value"
FROM
MOVIES
WHERE
"mid" NOT IN (SELECT "mid" FROM CUSTOM_VALUES_SHORTSTR WHERE "cmfid" = :CMFID_ID AND "value" = :VALUE_TEXT) AND
"visible" = -1 AND
(NOT EXISTS(SELECT FIRST 1 * FROM IMAGES WHERE ("mid" = MOVIES."mid") AND ("imgtype" = 1)));
DELETE FROM
CUSTOM_VALUES_SHORTSTR
WHERE
("cmfid" = :CMFID_ID) AND ("value" = :VALUE_TEXT) and
(EXISTS(SELECT FIRST 1 * FROM IMAGES WHERE ("mid" = CUSTOM_VALUES_SHORTSTR."mid") AND ("imgtype" = 1)));
suspend;
end^
SET TERM ; ^
COMMENT ON PROCEDURE USER_MARK_SCREENSHOTS IS
'Процедура отмечающая все фильмы где нет скриншотов, в виде метки используется пользовательское поле, с произвольным текстом';
DESCRIBE PARAMETER VALUE_TEXT PROCEDURE USER_MARK_SCREENSHOTS
'Текст вносимый в пользовательское поле';
DESCRIBE PARAMETER CMFID_ID PROCEDURE USER_MARK_SCREENSHOTS
'ID пользовательского поля в которое вносим значение VALUE_TEXT';
GRANT SELECT,INSERT,DELETE ON CUSTOM_VALUES_SHORTSTR TO PROCEDURE USER_MARK_SCREENSHOTS;
GRANT SELECT ON MOVIES TO PROCEDURE USER_MARK_SCREENSHOTS;
GRANT SELECT ON IMAGES TO PROCEDURE USER_MARK_SCREENSHOTS;
GRANT EXECUTE ON PROCEDURE USER_MARK_SCREENSHOTS TO SYSDBA;
3. Процедура отмечающая все фильмы где нет CD обложек, в виде метки используется пользовательское поле, с произвольным текстом
SET TERM ^ ;
CREATE OR ALTER PROCEDURE USER_MARK_CD_COVER (
value_text varchar(100),
cmfid_id integer)
as
begin
/*$$IBEC$$ CD ОБЛОЖКИ $$IBEC$$*/
INSERT INTO
CUSTOM_VALUES_SHORTSTR
("cmfid", "mid", "value")
SELECT
:CMFID_ID as "cmfid", "mid", :VALUE_TEXT as "value"
FROM
MOVIES
WHERE
"mid" NOT IN (SELECT "mid" FROM CUSTOM_VALUES_SHORTSTR WHERE "cmfid" = :CMFID_ID AND "value" = :VALUE_TEXT) AND
"visible" = -1 AND "epid" is NULL AND
(NOT EXISTS(SELECT FIRST 1 * FROM IMAGES WHERE ("mid" = MOVIES."mid") AND ("imgtype" = 3)));
DELETE FROM
CUSTOM_VALUES_SHORTSTR
WHERE
("cmfid" = :CMFID_ID) AND ("value" = :VALUE_TEXT) and
(EXISTS(SELECT FIRST 1 * FROM IMAGES WHERE ("mid" = CUSTOM_VALUES_SHORTSTR."mid") AND ("imgtype" = 3)));
suspend;
end^
SET TERM ; ^
COMMENT ON PROCEDURE USER_MARK_CD_COVER IS
'Процедура отмечающая все фильмы где нет CD обложек, в виде метки используется пользовательское поле, с произвольным текстом';
DESCRIBE PARAMETER VALUE_TEXT PROCEDURE USER_MARK_CD_COVER
'Текст вносимый в пользовательское поле';
DESCRIBE PARAMETER CMFID_ID PROCEDURE USER_MARK_CD_COVER
'ID пользовательского поля в которое вносим значение VALUE_TEXT';
GRANT SELECT,INSERT,DELETE ON CUSTOM_VALUES_SHORTSTR TO PROCEDURE USER_MARK_CD_COVER;
GRANT SELECT ON MOVIES TO PROCEDURE USER_MARK_CD_COVER;
GRANT SELECT ON IMAGES TO PROCEDURE USER_MARK_CD_COVER;
GRANT EXECUTE ON PROCEDURE USER_MARK_CD_COVER TO SYSDBA;
4. Процедура отмечающая все фильмы где нет BOX обложки, в виде метки используется пользовательское поле, с произвольным текстом
SET TERM ^ ;
CREATE OR ALTER PROCEDURE USER_MARK_BOX_COVER (
value_text varchar(100),
cmfid_id integer)
as
begin
/*$$IBEC$$ Box ОБЛОЖКИ $$IBEC$$*/
INSERT INTO
CUSTOM_VALUES_SHORTSTR
("cmfid", "mid", "value")
SELECT
:CMFID_ID as "cmfid", "mid", :VALUE_TEXT as "value"
FROM
MOVIES
WHERE
"mid" NOT IN (SELECT "mid" FROM CUSTOM_VALUES_SHORTSTR WHERE "cmfid" = :CMFID_ID AND "value" = :VALUE_TEXT) AND
"visible" = -1 AND "epid" is NULL AND
(NOT EXISTS(SELECT FIRST 1 * FROM IMAGES WHERE ("mid" = MOVIES."mid") AND ("imgtype" = 2)));
DELETE FROM
CUSTOM_VALUES_SHORTSTR
WHERE
("cmfid" = :CMFID_ID) AND ("value" = :VALUE_TEXT) and
(EXISTS(SELECT FIRST 1 * FROM IMAGES WHERE ("mid" = CUSTOM_VALUES_SHORTSTR."mid") AND ("imgtype" = 2)));
suspend;
end^
SET TERM ; ^
COMMENT ON PROCEDURE USER_MARK_BOX_COVER IS
'Процедура отмечающая все фильмы где нет BOX обложки, в виде метки используется пользовательское поле, с произвольным текстом';
DESCRIBE PARAMETER VALUE_TEXT PROCEDURE USER_MARK_BOX_COVER
'Текст вносимый в пользовательское поле';
DESCRIBE PARAMETER CMFID_ID PROCEDURE USER_MARK_BOX_COVER
'ID пользовательского поля в которое вносим значение VALUE_TEXT';
GRANT SELECT,INSERT,DELETE ON CUSTOM_VALUES_SHORTSTR TO PROCEDURE USER_MARK_BOX_COVER;
GRANT SELECT ON MOVIES TO PROCEDURE USER_MARK_BOX_COVER;
GRANT SELECT ON IMAGES TO PROCEDURE USER_MARK_BOX_COVER;
GRANT EXECUTE ON PROCEDURE USER_MARK_BOX_COVER TO SYSDBA;
[вложение удалено Администратором]
-
5. Добавляет в пользовательское поле с ID ''CMFID_ID'' значение ''VALUE_TEXT'' если в поле ''расположение носителя'' есть запись ''LOCATION_TEXT'', эпизоды не учитываются.
SET TERM ^ ;
CREATE OR ALTER PROCEDURE USER_MARK_LOCATION_TO_USER_FILD (
location_text varchar(127),
value_text varchar(127),
cmfid_id integer)
as
begin
INSERT INTO
CUSTOM_VALUES_SHORTSTR
("cmfid", "mid", "value")
SELECT
:CMFID_ID as "cmfid", "mid", :VALUE_TEXT as "value"
FROM
MOVIES
WHERE
"mid" NOT IN (SELECT "mid" FROM CUSTOM_VALUES_SHORTSTR WHERE "cmfid" = :CMFID_ID AND "value" = :VALUE_TEXT) AND
"visible" = -1 AND "epid" is NULL AND
(EXISTS(SELECT FIRST 1 * FROM locations WHERE (locations."locid" = movies."location") AND locations."value" = :LOCATION_TEXT));
DELETE FROM
CUSTOM_VALUES_SHORTSTR
WHERE
("cmfid" = :CMFID_ID) AND ("value" = :VALUE_TEXT) and
(NOT EXISTS(SELECT FIRST 1 * FROM locations, movies WHERE (locations."locid" = movies."location") AND locations."value" = :LOCATION_TEXT));
suspend;
end^
SET TERM ; ^
COMMENT ON PROCEDURE USER_MARK_LOCATION_TO_USER_FILD IS
'Добавляет в пользовательское поле с ID ''CMFID_ID'' значение ''VALUE_TEXT'' если в поле ''расположение носителя'' есть запись ''LOCATION_TEXT'', эпизоды не учитываются.';
DESCRIBE PARAMETER LOCATION_TEXT PROCEDURE USER_MARK_LOCATION_TO_USER_FILD
'Текст находящийся в поле ''Расположение Носителя''';
DESCRIBE PARAMETER VALUE_TEXT PROCEDURE USER_MARK_LOCATION_TO_USER_FILD
'Текст вносимый в пользовательское поле';
DESCRIBE PARAMETER CMFID_ID PROCEDURE USER_MARK_LOCATION_TO_USER_FILD
'ID пользовательского поля в которое вносим значение VALUE_TEXT';
GRANT SELECT,INSERT,DELETE ON CUSTOM_VALUES_SHORTSTR TO PROCEDURE USER_MARK_LOCATION_TO_USER_FILD;
GRANT SELECT ON MOVIES TO PROCEDURE USER_MARK_LOCATION_TO_USER_FILD;
GRANT SELECT ON LOCATIONS TO PROCEDURE USER_MARK_LOCATION_TO_USER_FILD;
GRANT EXECUTE ON PROCEDURE USER_MARK_LOCATION_TO_USER_FILD TO SYSDBA;
[вложение удалено Администратором]
-
6. В пользовательское поле (Short text) вставляется количество постеров фильма.
SET TERM ^ ;
CREATE OR ALTER PROCEDURE USER_COUNT_POSTER (
cmfid_id integer)
as
begin
delete from custom_values_shortstr where "cmfid" = :CMFID_ID;
INSERT INTO
CUSTOM_VALUES_SHORTSTR
("cmfid", "mid", "value")
select
:CMFID_ID as "cmfid",
images."mid" as "mid",
count( images."mid") as "value"
from images
where
(
(images."imgtype" = '0')
)
group by images."mid", images."imgtype";
suspend;
end^
SET TERM ; ^
COMMENT ON PROCEDURE USER_COUNT_POSTER IS
'В пользовательское поле вставляется количество постеров фильма.';
DESCRIBE PARAMETER CMFID_ID PROCEDURE USER_COUNT_POSTER
'ID пользовательского поля';
GRANT SELECT,INSERT,DELETE ON CUSTOM_VALUES_SHORTSTR TO PROCEDURE USER_COUNT_POSTER;
GRANT SELECT ON IMAGES TO PROCEDURE USER_COUNT_POSTER;
GRANT EXECUTE ON PROCEDURE USER_COUNT_POSTER TO SYSDBA;
7. В пользовательское поле (Short text) вставляется количество скриншотов фильма.
SET TERM ^ ;
CREATE OR ALTER PROCEDURE USER_COUNT_SCREEN (
cmfid_id integer)
as
begin
delete from custom_values_shortstr where "cmfid" = :CMFID_ID;
INSERT INTO
CUSTOM_VALUES_SHORTSTR
("cmfid", "mid", "value")
select
:CMFID_ID as "cmfid",
images."mid" as "mid",
count( images."mid") as "value"
from images
where
(
(images."imgtype" = '1')
)
group by images."mid", images."imgtype";
suspend;
end^
SET TERM ; ^
COMMENT ON PROCEDURE USER_COUNT_SCREEN IS
'В пользовательское поле вставляется количество скриншотов фильма.';
DESCRIBE PARAMETER CMFID_ID PROCEDURE USER_COUNT_SCREEN
'ID пользовательского поля';
GRANT SELECT,INSERT,DELETE ON CUSTOM_VALUES_SHORTSTR TO PROCEDURE USER_COUNT_SCREEN;
GRANT SELECT ON IMAGES TO PROCEDURE USER_COUNT_SCREEN;
GRANT EXECUTE ON PROCEDURE USER_COUNT_SCREEN TO SYSDBA;
p.s. После создания поля в программе необходимо хотя бы у одного фильма, в ручную, внести значение в поле.
[вложение удалено Администратором]