PDA

Просмотр полной версии : Построитель запроса MySQL


Konctantin
16.06.2010, 00:26
Доброй ночи, подскажите пожалуйста, есть ли в mysql построитель запроса?

могу объяснить на примере запроса в 1С:


ВЫБРАТЬ
ВложенныйЗапрос.Документ КАК Документ,
ВложенныйЗапрос.Период,
ВложенныйЗапрос.РозничныйСклад КАК РозничныйСклад,
ВложенныйЗапрос.Себестоим сть КАК Себестоимость,
ВложенныйЗапрос.Выручка КАК Выручка,
1 * 0 КАК Доход,
НАЧАЛОПЕРИОДА(ВложенныйЗапрос.Перио д, ДЕНЬ) КАК ПериодДень,
НАЧАЛОПЕРИОДА(ВложенныйЗапрос.Перио д, НЕДЕЛЯ) КАК ПериодНеделя,
НАЧАЛОПЕРИОДА(ВложенныйЗапрос.Перио д, МЕСЯЦ) КАК ПериодМесяц,
НАЧАЛОПЕРИОДА(ВложенныйЗапрос.Перио д, ДЕКАДА) КАК ПериодДекада,
НАЧАЛОПЕРИОДА(ВложенныйЗапрос.Перио д, ГОД) КАК ПериодГод,
ВложенныйЗапрос.НДСВыручк КАК НДСВыручки,
2 * 0 КАК СуммаВыручкиБезНДС
ИЗ
(ВЫБРАТЬ
ХозрасчетныйОбороты.Регистратор КАК Документ,
ХозрасчетныйОбороты.Перио КАК Период,
ХозрасчетныйОбороты.КорСу конто2 КАК РозничныйСклад,
ХозрасчетныйОбороты.Сумма борот КАК Себестоимость,
NULL КАК Выручка,
NULL КАК НДСВыручки
ИЗ
РегистрБухгалтерии.Хозрасч тный.Обороты(&ДатаНач, &ДатаКон, Регистратор, Счет В (&Счет902), , , КорСчет В (&Счет2822), ) КАК ХозрасчетныйОбороты

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
ПриходныйКассовыйОрдерПри емРозничнойВыручки.Ссылка,
ПриходныйКассовыйОрдерПри емРозничнойВыручки.Ссылка.Дат а,
ПриходныйКассовыйОрдерПри емРозничнойВыручки.Ссылка.Кон трагент,
NULL,
ПриходныйКассовыйОрдерПри емРозничнойВыручки.Сумма,
ПриходныйКассовыйОрдерПри емРозничнойВыручки.СуммаНДС
ИЗ
Документ.ПриходныйКассовы Ордер.ПриемРозничнойВыручки КАК ПриходныйКассовыйОрдерПри емРозничнойВыручки
ГДЕ
ПриходныйКассовыйОрдерПри емРозничнойВыручки.Ссылка.Вид Операции = &ВидОперации
И ПриходныйКассовыйОрдерПри емРозничнойВыручки.Ссылка.Про веден
И ПриходныйКассовыйОрдерПри емРозничнойВыручки.Ссылка.Дат а МЕЖДУ &ДатаНач И &ДатаКон) КАК ВложенныйЗапрос
{ГДЕ
ВложенныйЗапрос.Документ.*,
ВложенныйЗапрос.РозничныйСклад.*}

УПОРЯДОЧИТЬ ПО
РозничныйСклад,
Документ
{УПОРЯДОЧИТЬ ПО
Документ.*,
РозничныйСклад.*,
ПериодДень,
ПериодНеделя,
ПериодМесяц,
ПериодДекада,
ПериодГод}
ИТОГИ
СУММА(Себестоимость),
СУММА(Выручка),
СУММА(Выручка) - СУММА(Себестоимость) КАК Доход,
СУММА(НДСВыручки),
СУММА(Выручка) - СУММА(НДСВыручки) КАК СуммаВыручкиБезНДС
ПО
ОБЩИЕ,
РозничныйСклад,
Документ,
ПериодДень,
ПериодМесяц,
ПериодНеделя,
ПериодДекада,
ПериодГод
{ИТОГИ ПО
Документ.*,
РозничныйСклад.*,
ПериодДень,
ПериодНеделя,
ПериодМесяц,
ПериодДекада,
ПериодГод}
АВТОУПОРЯДОЧИВАНИЕ



так вот, есть такой участок кода:
{ГДЕ
ВложенныйЗапрос.Документ.*,
ВложенныйЗапрос.РозничныйСклад.*}
// вызов
Для индекс = 0 ПО индекс = ПостроительОтчета.Отбор.Ко личество() Цикл
ПостроительОтчета.Отбор.По лучить(индекс);
Следующий;
КонецЦикла
// суть в том, что загружается таблица значений и если есть какие-то значения, то они подставляются


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

Есть ли что-то подобное в MySQL

Minimajack
16.06.2010, 00:58
насколько мне известно - в самом скуле нет.

tempura
16.06.2010, 04:14
По идее - если это где и есть, то в оболочках, а никак не в самом мускл.
1С ведь тоже только оболочка для работы с БД. :)

KiriX
16.06.2010, 08:44
В навикат нечто подобное QueryBuilder - наверняка где-то есть ещё что-то и даже более удобное =)

Konctantin
16.06.2010, 09:43
Мне, это надо для евентаи конструктора, а именно для реализации фильтра, просто мне очень не хочется писать этажи кода, для формирования строки запроса.

Если нет... Тогда прийдется написать самому обработчик

Nordway
16.06.2010, 11:19
В Navicat есть нечто похожее: Query - New Query.

Konctantin
16.06.2010, 11:31
Нет, это совсем не то, как сделаю, покажу что я имел ввиду.