powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / 2 различных запроса в одном
11 сообщений из 11, страница 1 из 1
2 различных запроса в одном
    #38888535
GreenElf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ситуация : Есть некий генератор отчетов которому я могу передавать параметры и в нем (в генераторе) написать некий SQL запрос для построения отчета.

Задача : Отчет к примеру Прайс-Лист, но прайс лист может быть по остаткам на складе а может быть общий по всей возможной номенлатуре. Т.е. отчет один но SQL запросы немного отличаются.

Итак проблема : есть запрос который зависит от входных параметров (запрос не верен но логика я думаю понятна):
Код: 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.
45.
46.
CASE WHEN ('{isNomn}' = '0') THEN
SELECT * FROM (SELECT
	msus.snon_id,
	snon.art,
	snon.naim,
	msus.ost,
	msus.cena,
	msus.cenao,
        snonv.mfoto,
	msus.ost * msus.cenao AS summa,
	GROUP_CONCAT(CONCAT(smcur.naim, ': ', smcgr.naim) SEPARATOR '; ') AS cont_naim
FROM
	ms_msus AS msus
LEFT JOIN op_snon AS snon ON msus.snon_id = snon.id
LEFT JOIN op_snonv AS snonv ON snon.id = snonv.snon_id
LEFT JOIN ms_msusw as msusw ON (msusw.msus_id = msus.id)
LEFT JOIN ms_smcur AS smcur ON msusw.smcur_id = smcur.id
LEFT JOIN ms_smcgr AS smcgr ON msusw.smcgr_id = smcgr.id
WHERE 
msus.ost > 0
AND CASE WHEN ('{spzSID}' = '0') THEN 1=1 ELSE msus.spz_sid IN ({spzSID}) END
GROUP BY
	msus.id
ORDER BY snon.art
) as tmp
ELSE
SELECT * FROM (SELECT
	snon.id,
	snon.art,
	snon.naim,
	0 as ost,
	snon.cena,
	snon.cenao,
        snonv.mfoto,
	0 as summa,
	'' AS cont_naim
FROM
	op_snon AS snon
LEFT JOIN op_snonv AS snonv ON snon.id = snonv.snon_id
WHERE 
1=1
GROUP BY
	snon.id
ORDER BY snon.art
) as tmp
END



Вопрос : можно ли вообще в одном запросе сделать что-то подобное?
{spzSID} и {isNomn} - Это параметры генератора которые преобразуются при построении документа в то что я передаю.
PS: Оба отчета работают по отдельности и возвращают одинаковую структуру данных для построения документа.
...
Рейтинг: 0 / 0
2 различных запроса в одном
    #38888693
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Реализуй эту фигню в рамках хранимой процедуры. С параметрами...
...
Рейтинг: 0 / 0
2 различных запроса в одном
    #38888696
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ещё правильнее - раздели отчёты полностью. Для каждого свой шаблон и свой запрос. Тебе чего, байтов жалко?
...
Рейтинг: 0 / 0
2 различных запроса в одном
    #38888718
GreenElf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я пробую реализовать при помощи хранимой процедуры но тут проблема в другом, я ее сразу не описал, пользовательских баз данных - множество и я не могу создать заранее хранимую процедуру т.к. баз данных много и они постоянно добавляются (по мере регистраций новых пользователей), а печать документов постоянно дополняется новыми шаблонами, кроме того если меняется внешний вид какого-то документа, то при наличии клонов - нужно и в них менять т.е. клонировать однотипные документы не вариант.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
DELIMITER |
DROP PROCEDURE IF EXISTS `proc_get_price` |
CREATE PROCEDURE `proc_get_price` (nomn INT, spzid INT)
BEGIN 
	IF (nomn = 0) THEN 
		SELECT '1';
	ELSE 
		SELECT '2';
	END IF;
END; |
DELIMITER ;
CALL proc_get_price(0, 0);


Да и запрос такого вида не хочет работать в шаблонизаторе, вероятно процедуры у них не поддерживаются.
...
Рейтинг: 0 / 0
2 различных запроса в одном
    #38888756
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GreenElf
Код: sql
1.
CASE WHEN ('{spzSID}' = '0') THEN 1=1 ELSE msus.spz_sid IN ({spzSID}) END

Код: sql
1.
('{spzSID}' = '0' OR msus.spz_sid IN ({spzSID}))
...
Рейтинг: 0 / 0
2 различных запроса в одном
    #38888899
GreenElf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftGreenElf
Код: sql
1.
CASE WHEN ('{spzSID}' = '0') THEN 1=1 ELSE msus.spz_sid IN ({spzSID}) END

Код: sql
1.
('{spzSID}' = '0' OR msus.spz_sid IN ({spzSID}))



Да, спасибо, очевидное поправлено, однако основное остается под вопросом
...
Рейтинг: 0 / 0
2 различных запроса в одном
    #38889069
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaРеализуй эту фигню в рамках хранимой процедуры. С параметрами...

+1
...
Рейтинг: 0 / 0
2 различных запроса в одном
    #38889070
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaА ещё правильнее - раздели отчёты полностью. Для каждого свой шаблон и свой запрос. Тебе чего, байтов жалко?
+10
...
Рейтинг: 0 / 0
2 различных запроса в одном
    #38889071
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GreenElf,

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

залить одну и ту же процедуру в разные бд - не большая проблема. можно написать скрипт...
...
Рейтинг: 0 / 0
2 различных запроса в одном
    #38889126
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно извратиться:
Код: sql
1.
2.
3.
SELECT ... FROM ... WHERE ... AND '{isNomn}' = '0'
UNION ALL
SELECT ... FROM ... WHERE ... AND '{isNomn}' <> '0'

Только набор полей в обоих SELECT-ах должен строго совпадать по количеству и порядку типов.
...
Рейтинг: 0 / 0
2 различных запроса в одном
    #38889253
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftМожно извратиться:
Код: sql
1.
2.
3.
SELECT ... FROM ... WHERE ... AND '{isNomn}' = '0'
UNION ALL
SELECT ... FROM ... WHERE ... AND '{isNomn}' <> '0'

Только набор полей в обоих SELECT-ах должен строго совпадать по количеству и порядку типов.
как раз хотел написать, писать условие которое заведомо ложно в одном и истино в другом случае в юнион.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / 2 различных запроса в одном
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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