BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 09 май 2024, 04:53

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 32 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Помогите с SQL запросом
СообщениеДобавлено: 24 мар 2011, 14:05 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 08 мар 2007, 20:44
Сообщения: 1570
Откуда: Челябинск
Карма: 18
Доброго времени суток!
Стоит задача выудить из биллинга номер телефона контракта, сумма баланса на начало месяца если абонент не заплатил, для системы автоматического обзвона должников, попытался наваять запрос, но он не пашет, так как ошибочный, а знаний пока в этой области маловато, помогите кто чем может
вот что у меня получилось:
Код:
select phone.phone1,phone.phone2,phone.phone3,phone.phone4,phone.phone5
from   contract_parameter_type_9 AS Phone,
   LEFT JOIN
   contract_parameter_type_5 as flag
   ON flag.cid = phone.cid
where   flag.pid=42
   and flag.val=1
order by phone.phone1

заранее спасибо

_________________
Интернет и телефония оптом со склада, или в розницу


Последний раз редактировалось max 24 мар 2011, 15:42, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с SQL запросом
СообщениеДобавлено: 24 мар 2011, 14:12 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 29 мар 2010, 23:11
Сообщения: 5854
Карма: 472
Какая версия биллинга?
Если судить по contract_parameter_type_9 то 4.6 потому что в 5.1. другие таблицы. Прав?

_________________
Цитаты великих людей :umnik:
Напишите в helpdesk © stark
повторяю: => хелпдеск => доработка => профит © dimOn
свершилось... © skn
Мой код изящен, лёгок, оригинален, краток. Как прохладный весенний ветерок, как звонкий ручей! © dimOn
Вежливый разработчик © Artur
Эти баги тоже исправлены, как и те, которые еще не написаны © Artur
ну т.е. существует воркэраунд, ок © dimOn


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с SQL запросом
СообщениеДобавлено: 24 мар 2011, 15:03 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 08 мар 2007, 20:44
Сообщения: 1570
Откуда: Челябинск
Карма: 18
нет, 5.0

_________________
Интернет и телефония оптом со склада, или в розницу


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с SQL запросом
СообщениеДобавлено: 24 мар 2011, 15:10 
Не в сети
Разработчик

Зарегистрирован: 07 апр 2007, 23:51
Сообщения: 4489
Откуда: Уфа, Россия
Карма: 186
Код:
select phone.phone1,phone.phone2,phone.phone3,phone.phone4,phone.phone5
from   contract_parameter_type_9 AS phone
   LEFT JOIN
   contract_parameter_type_5 as flag
   ON flag.cid = phone.cid
where   flag.pid=42
   and flag.val=1
order by phone.phone1


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с SQL запросом
СообщениеДобавлено: 24 мар 2011, 15:20 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 08 мар 2007, 20:44
Сообщения: 1570
Откуда: Челябинск
Карма: 18
спс! дело было в заглавной букве и запятой!

_________________
Интернет и телефония оптом со склада, или в розницу


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с SQL запросом
СообщениеДобавлено: 24 мар 2011, 15:37 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 03 авг 2009, 18:42
Сообщения: 7166
Откуда: Благовещенск
Карма: 241
мож на вики? чтоб не потерялся?

_________________
Код:
  Клиент: вер. 6.2.714 / 25.05.2015 17:27:15
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
  Сервер: вер. 6.2.881 / 22.05.2015 17:56:55
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
Помощь по администрированию bgbilling в jabber конференции или Группа в telegram
Стиль программирования - пьяный мастерстер
Разработка мобильных приложений


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с SQL запросом
СообщениеДобавлено: 24 мар 2011, 15:41 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 08 мар 2007, 20:44
Сообщения: 1570
Откуда: Челябинск
Карма: 18
а как можно в этот запрос интегрировать вот этот?
SELECT cnt.title, cnt.comment, balance.summa1
FROM contract_balance AS balance,
contract AS cnt
LEFT JOIN
contract_payment AS pay
ON cnt.id = pay.cid AND pay.dt BETWEEN '2011-03-01' AND '2011-03-31'
WHERE pay.id IS NULL
AND cnt.date2 IS NULL
AND cnt.gr = gr & (1 << 2)
AND balance.cid = cnt.id
AND balance.yy = '2011'
AND balance.mm = '3'
AND balance.summa1 < 0
ORDER BY cnt.title

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

_________________
Интернет и телефония оптом со склада, или в розницу


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с SQL запросом
СообщениеДобавлено: 24 мар 2011, 15:41 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 08 мар 2007, 20:44
Сообщения: 1570
Откуда: Челябинск
Карма: 18
skyb писал(а):
мож на вики? чтоб не потерялся?

дык обязательно как закончу, так как первый запрос это тока 50% от цели...

_________________
Интернет и телефония оптом со склада, или в розницу


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с SQL запросом
СообщениеДобавлено: 24 мар 2011, 15:42 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 03 авг 2009, 18:42
Сообщения: 7166
Откуда: Благовещенск
Карма: 241
max писал(а):
skyb писал(а):
мож на вики? чтоб не потерялся?

дык обязательно как закончу, так как первый запрос это тока 50% от цели...

ждем ;)

_________________
Код:
  Клиент: вер. 6.2.714 / 25.05.2015 17:27:15
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
  Сервер: вер. 6.2.881 / 22.05.2015 17:56:55
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
Помощь по администрированию bgbilling в jabber конференции или Группа в telegram
Стиль программирования - пьяный мастерстер
Разработка мобильных приложений


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с SQL запросом
СообщениеДобавлено: 24 мар 2011, 15:43 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 08 мар 2007, 20:44
Сообщения: 1570
Откуда: Челябинск
Карма: 18
to skyb может поможешь? а то я не силён в SQL.
начал писать на виккки
http://wiki.bgbilling.ru/index.php/%D0% ... 1%81%D1%8B

_________________
Интернет и телефония оптом со склада, или в розницу


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с SQL запросом
СообщениеДобавлено: 24 мар 2011, 15:50 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 03 авг 2009, 18:42
Сообщения: 7166
Откуда: Благовещенск
Карма: 241
max писал(а):
to skyb может поможешь? а то я не силён в SQL.

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

_________________
Код:
  Клиент: вер. 6.2.714 / 25.05.2015 17:27:15
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
  Сервер: вер. 6.2.881 / 22.05.2015 17:56:55
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
Помощь по администрированию bgbilling в jabber конференции или Группа в telegram
Стиль программирования - пьяный мастерстер
Разработка мобильных приложений


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с SQL запросом
СообщениеДобавлено: 24 мар 2011, 17:43 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 08 мар 2007, 20:44
Сообщения: 1570
Откуда: Челябинск
Карма: 18
стукнул :)

_________________
Интернет и телефония оптом со склада, или в розницу


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с SQL запросом
СообщениеДобавлено: 25 мар 2011, 15:44 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 08 мар 2007, 20:44
Сообщения: 1570
Откуда: Челябинск
Карма: 18
совместно со skyb был наваян следующий код
Код:
import bitel.billing.server.util.*;
import bitel.billing.server.contract.bean.*;
import java.sql.*;
import java.math.*;
public void main( setup, con, conSlave )
{

String query_dolg = "SELECT cnt.id, cnt.title, cnt.comment, balance.summa1 FROM contract_balance AS balance,contract AS cnt LEFT JOIN contract_payment AS pay ON cnt.id = pay.cid AND pay.dt BETWEEN '2011-03-01' AND '2011-03-31' WHERE pay.id IS NULL AND cnt.date2 IS NULL AND cnt.gr = gr & (1 << 2) AND balance.cid = cnt.id AND balance.yy = '2011' AND balance.mm = '3' AND balance.summa1 < 0 ORDER BY cnt.title";
PreparedStatement ps = con.prepareStatement( query_dolg );
ResultSet rs = ps.executeQuery();
int id;
int summa;
while( rs.next() )
{
String title = rs.getString("title");
String comment = rs.getString("comment");
summa = rs.getInt("summa1");
id = rs.getInt("id");
print ("title -> " + title);
print ("comment -> " + comment);
print ("summa -> " + summa);
print ("id -> " + id);
}
rs.close();
ps.close();

String query = "select phone.phone1,phone.phone2,phone.phone3,phone.phone4,phone.phone5 from contract, contract_parameter_type_9 AS phone LEFT JOIN contract_parameter_type_5 as flag ON flag.cid = phone.cid where flag.pid=42 and flag.val=1 and contract.id = "+id+" and contract.id order by phone.phone1";
PreparedStatement ps = con.prepareStatement( query );
ResultSet rs = ps.executeQuery();
while( rs.next() )
{
String phone = rs.getString("phone1");
String phone1 = rs.getString("phone2");
String phone2 = rs.getString("phone3");
String phone3 = rs.getString("phone4");
String phone4 = rs.getString("phone5");
print ("phone1 -> " + phone);
print ("phone2 -> " + phone1);
print ("phone3 -> " + phone2);
print ("phone4 -> " + phone3);
print ("phone5 -> " + phone4);
}
rs.close();
    ps.close();
}

однако он не закончен, так как skyb в отпуске, а я в програмировании не шарю.
У меня есть жгучее желание всётаки обойтись не скриптом, а единым SQL запросом, но я незнаю как...

_________________
Интернет и телефония оптом со склада, или в розницу


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с SQL запросом
СообщениеДобавлено: 26 мар 2011, 19:20 
Не в сети
Клиент

Зарегистрирован: 12 фев 2008, 18:10
Сообщения: 3951
Карма: 249
типа того:
Код:
import bitel.billing.server.util.*;
import bitel.billing.server.contract.bean.*;
import java.sql.*;
import java.math.*;

public void main( setup, con, conSlave )
{
    String query_dolg = "SELECT cnt.id, cnt.title, cnt.comment, balance.summa1 FROM contract_balance AS balance,contract AS cnt LEFT JOIN contract_payment AS pay ON cnt.id = pay.cid AND pay.dt BETWEEN '2011-03-01' AND '2011-03-31' WHERE pay.id IS NULL AND cnt.date2 IS NULL AND cnt.gr = gr & (1 << 2) AND balance.cid = cnt.id AND balance.yy = '2011' AND balance.mm = '3' AND balance.summa1 < 0 ORDER BY cnt.title";
    String query      = "select phone.phone1,phone.phone2,phone.phone3,phone.phone4,phone.phone5 from contract, contract_parameter_type_9 AS phone LEFT JOIN contract_parameter_type_5 as flag ON flag.cid = phone.cid where flag.pid=42 and flag.val=1 and contract.id = ? and contract.id order by phone.phone1";

    PreparedStatement ps_dolg = con.prepareStatement(query_dolg);
    ResultSet         rs_dolg = ps.executeQuery();

    int id;
    int summa;

    String title   = "";
    String comment = "";

    String phone  = "";
    String phone1 = "";
    String phone2 = "";
    String phone3 = "";
    String phone4 = "";

    while(rs_dolg.next())
    {
        title   = rs_dolg.getString("title");
        comment = rs_dolg.getString("comment");
        summa   = rs_dolg.getInt("summa1");
        id      = rs_dolg.getInt("id");

        print ("title -> " + title);
        print ("comment -> " + comment);
        print ("summa -> " + summa);
        print ("id -> " + id);

        PreparedStatement ps = con.prepareStatement( query );
        ps.setInt(1, id);
        ResultSet         rs = ps.executeQuery();

        phone  = rs.getString("phone1");
        phone1 = rs.getString("phone2");
        phone2 = rs.getString("phone3");
        phone3 = rs.getString("phone4");
        phone4 = rs.getString("phone5");

        print ("phone1 -> " + phone);
        print ("phone2 -> " + phone1);
        print ("phone3 -> " + phone2);
        print ("phone4 -> " + phone3);
        print ("phone5 -> " + phone4);
    }
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с SQL запросом
СообщениеДобавлено: 27 мар 2011, 00:56 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 08 мар 2007, 20:44
Сообщения: 1570
Откуда: Челябинск
Карма: 18
snark писал(а):
типа того:
Код:
import bitel.billing.server.util.*;
import bitel.billing.server.contract.bean.*;
import java.sql.*;
import java.math.*;

public void main( setup, con, conSlave )
{
    String query_dolg = "SELECT cnt.id, cnt.title, cnt.comment, balance.summa1 FROM contract_balance AS balance,contract AS cnt LEFT JOIN contract_payment AS pay ON cnt.id = pay.cid AND pay.dt BETWEEN '2011-03-01' AND '2011-03-31' WHERE pay.id IS NULL AND cnt.date2 IS NULL AND cnt.gr = gr & (1 << 2) AND balance.cid = cnt.id AND balance.yy = '2011' AND balance.mm = '3' AND balance.summa1 < 0 ORDER BY cnt.title";
    String query      = "select phone.phone1,phone.phone2,phone.phone3,phone.phone4,phone.phone5 from contract, contract_parameter_type_9 AS phone LEFT JOIN contract_parameter_type_5 as flag ON flag.cid = phone.cid where flag.pid=42 and flag.val=1 and contract.id = ? and contract.id order by phone.phone1";

    PreparedStatement ps_dolg = con.prepareStatement(query_dolg);
    ResultSet         rs_dolg = ps.executeQuery();

    int id;
    int summa;

    String title   = "";
    String comment = "";

    String phone  = "";
    String phone1 = "";
    String phone2 = "";
    String phone3 = "";
    String phone4 = "";

    while(rs_dolg.next())
    {
        title   = rs_dolg.getString("title");
        comment = rs_dolg.getString("comment");
        summa   = rs_dolg.getInt("summa1");
        id      = rs_dolg.getInt("id");

        print ("title -> " + title);
        print ("comment -> " + comment);
        print ("summa -> " + summa);
        print ("id -> " + id);

        PreparedStatement ps = con.prepareStatement( query );
        ps.setInt(1, id);
        ResultSet         rs = ps.executeQuery();

        phone  = rs.getString("phone1");
        phone1 = rs.getString("phone2");
        phone2 = rs.getString("phone3");
        phone3 = rs.getString("phone4");
        phone4 = rs.getString("phone5");

        print ("phone1 -> " + phone);
        print ("phone2 -> " + phone1);
        print ("phone3 -> " + phone2);
        print ("phone4 -> " + phone3);
        print ("phone5 -> " + phone4);
    }
}

не не катит
COMPLETE_TIME: 26.03.11 23:55:28
PROCESS_TIME: 20

OUT:


ERROR:


EXCEPTIONS:
Typed variable declaration : Attempt to resolve method: executeQuery() on undefined variable or class name: ps
Typed variable declaration : Attempt to resolve method: executeQuery() on undefined variable or class name: ps : at Line: 12 : in file: snark : ps .executeQuery ( )

Called from method: main : at Line: -1 : in file: <Called from Java Code> : <Compiled Java Code>
at bsh.UtilEvalError.toEvalError(Unknown Source)
at bsh.UtilEvalError.toEvalError(Unknown Source)
at bsh.BSHMethodInvocation.eval(Unknown Source)
at bsh.BSHPrimaryExpression.eval(Unknown Source)
at bsh.BSHPrimaryExpression.eval(Unknown Source)
at bsh.BSHVariableDeclarator.eval(Unknown Source)
at bsh.BSHTypedVariableDeclaration.eval(Unknown Source)
at bsh.BSHBlock.evalBlock(Unknown Source)
at bsh.BSHBlock.eval(Unknown Source)
at bsh.BshMethod.invokeImpl(Unknown Source)
at bsh.BshMethod.invoke(Unknown Source)
at bsh.BshMethod.invoke(Unknown Source)
at bsh.This.invokeMethod(Unknown Source)
at bsh.This.invokeMethod(Unknown Source)
at ru.bitel.bgbilling.kernel.script.server.bean.ScriptInstance.invoke(ScriptInstance.java:329)
at bitel.billing.server.script.global.bean.GlobalScriptMachine.runScriptImpl(GlobalScriptMachine.java:130)
at bitel.billing.server.script.global.bean.GlobalScriptMachine.runScript(GlobalScriptMachine.java:65)
at bitel.billing.server.script.global.bean.GlobalScriptManager.executeGlobalScript(GlobalScriptManager.java:36)
at bitel.billing.server.script.global.ActionExecuteScript$1ScriptThread.run(ActionExecuteScript.java:33)


WARNINGS:

_________________
Интернет и телефония оптом со склада, или в розницу


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с SQL запросом
СообщениеДобавлено: 27 мар 2011, 15:06 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
Цитата:
Typed variable declaration : Attempt to resolve method: executeQuery() on undefined variable or class name: ps


Ну видно же, что тут косяк, что уж вы....

Код:
    PreparedStatement ps_dolg = con.prepareStatement(query_dolg);
    ResultSet         rs_dolg = ps.executeQuery();

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с SQL запросом
СообщениеДобавлено: 27 мар 2011, 15:29 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 08 мар 2007, 20:44
Сообщения: 1570
Откуда: Челябинск
Карма: 18
к сожалению не шарю в программировании, поэтому это для меня не очевидно!
более того даже указание на ошибку не говорит мне о том что тут нада поправить....

_________________
Интернет и телефония оптом со склада, или в розницу


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с SQL запросом
СообщениеДобавлено: 28 мар 2011, 02:42 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
ps на ps_dolg

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с SQL запросом
СообщениеДобавлено: 28 мар 2011, 11:37 
Не в сети
Клиент

Зарегистрирован: 12 фев 2008, 18:10
Сообщения: 3951
Карма: 249
код вообще писался на коленке и поэтому не факт что будет работать, хотя по идее должен ... меня больше волнует другое - Вы уверены что запрос, который в "query"
Код:
SELECT
    phone.phone1,
    phone.phone2,
    phone.phone3,
    phone.phone4,
    phone.phone5
FROM
    contract,
    contract_parameter_type_9 AS phone
LEFT JOIN
contract_parameter_type_5 AS flag ON flag.cid = phone.cid
WHERE
flag.pid = 42 AND
flag.val = 1 AND
contract.id = ? AND
contract.id
ORDER BY phone.phone1

вообще работает? я думаю что из за
Код:
contract.id = ? AND contract.id

оно будет выдавать ошибку SQL (ид контракта такой то ... и ... и ЧТО?!?) ... пропрбуйте вместо восклицательного знака "?" поставить ID какого нить договора и запустите этот запрос в косоли MySQL, а потом покажите что он выдаст

dimOn писал(а):
ps на ps_dolg

да :facepalm:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с SQL запросом
СообщениеДобавлено: 28 мар 2011, 15:18 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 08 мар 2007, 20:44
Сообщения: 1570
Откуда: Челябинск
Карма: 18
dimOn писал(а):
ps на ps_dolg

теперь даёт выхлоп
COMPLETE_TIME: 28.03.11 15:18:08
PROCESS_TIME: 73

OUT:
title -> ТФ-07-0001-В
comment -> ТСЖ "Наш Дом"
summa -> -711
id -> 123


ERROR:


EXCEPTIONS:
Method Invocation rs.getString
Method Invocation rs.getString : at Line: 42 : in file: snark : rs .getString ( "phone1" )

Target exception: java.sql.SQLException: Before start of result set

at bsh.BSHMethodInvocation.eval(Unknown Source)
at bsh.BSHPrimaryExpression.eval(Unknown Source)
at bsh.BSHPrimaryExpression.eval(Unknown Source)
at bsh.BSHAssignment.eval(Unknown Source)
at bsh.BSHBlock.evalBlock(Unknown Source)
at bsh.BSHBlock.eval(Unknown Source)
at bsh.BSHBlock.eval(Unknown Source)
at bsh.BSHWhileStatement.eval(Unknown Source)
at bsh.BSHBlock.evalBlock(Unknown Source)
at bsh.BSHBlock.eval(Unknown Source)
at bsh.BshMethod.invokeImpl(Unknown Source)
at bsh.BshMethod.invoke(Unknown Source)
at bsh.BshMethod.invoke(Unknown Source)
at bsh.This.invokeMethod(Unknown Source)
at bsh.This.invokeMethod(Unknown Source)
at ru.bitel.bgbilling.kernel.script.server.bean.ScriptInstance.invoke(ScriptInstance.java:329)
at bitel.billing.server.script.global.bean.GlobalScriptMachine.runScriptImpl(GlobalScriptMachine.java:130)
at bitel.billing.server.script.global.bean.GlobalScriptMachine.runScript(GlobalScriptMachine.java:65)
at bitel.billing.server.script.global.bean.GlobalScriptManager.executeGlobalScript(GlobalScriptManager.java:36)
at bitel.billing.server.script.global.ActionExecuteScript$1ScriptThread.run(ActionExecuteScript.java:33)


WARNINGS:

_________________
Интернет и телефония оптом со склада, или в розницу


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с SQL запросом
СообщениеДобавлено: 28 мар 2011, 15:23 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 08 мар 2007, 20:44
Сообщения: 1570
Откуда: Челябинск
Карма: 18
snark писал(а):
код вообще писался на коленке и поэтому не факт что будет работать, хотя по идее должен ... меня больше волнует другое - Вы уверены что запрос, который в "query"
Код:
SELECT
    phone.phone1,
    phone.phone2,
    phone.phone3,
    phone.phone4,
    phone.phone5
FROM
    contract,
    contract_parameter_type_9 AS phone
LEFT JOIN
contract_parameter_type_5 AS flag ON flag.cid = phone.cid
WHERE
flag.pid = 42 AND
flag.val = 1 AND
contract.id = ? AND
contract.id
ORDER BY phone.phone1

вообще работает? я думаю что из за
Код:
contract.id = ? AND contract.id

оно будет выдавать ошибку SQL (ид контракта такой то ... и ... и ЧТО?!?) ... пропрбуйте вместо восклицательного знака "?" поставить ID какого нить договора и запустите этот запрос в косоли MySQL, а потом покажите что он выдаст

dimOn писал(а):
ps на ps_dolg

да :facepalm:

выполнил вот такой код
Код:
SELECT
    phone.phone1,
    phone.phone2,
    phone.phone3,
    phone.phone4,
    phone.phone5
FROM
    contract,
    contract_parameter_type_9 AS phone
LEFT JOIN
contract_parameter_type_5 AS flag ON flag.cid = phone.cid
WHERE
flag.pid = 42 AND
flag.val = 1 AND
contract.id = 100 AND
contract.id
ORDER BY phone.phone1

результат такой
Код:
      79222349158      
   73512610311   73519046043      
      79222317114   79090760990   
      79227106197      
      79222317114   79090760990   
      79193139776      
      79028901676      
      79630742833      
      79127992055      
      73519027405      
      73517259860   79630887357   
      79525089337      
      79127992055      
      73519027405      
      79193399111   79227130055   
      79026037191      
   73517371925   79823166224      
      79068014888      
   73512471747   79127792591      
      79226300333      
      79068643610   79517777193   79227040583
      79525089337      
      79127983578      
      79127919693      
      79630742833      
      79227028840      
      79127983578      
   73512610311   73519046043      
73432222222   73432172662         
73512111222            

но как мне видится это не то что нада...
вообще идея была сделать это всё не скриптом, а одним SQL запросом! который бы удовлетворял след условиям:
[b]1. вход. остаток на начало месяца меньше нуля.
2. Нет платежей в текущем месяце.
3. В свойствах договора установлен флаг "включить в программу обзвона должников".
[b/]

_________________
Интернет и телефония оптом со склада, или в розницу


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с SQL запросом
СообщениеДобавлено: 28 мар 2011, 15:42 
Не в сети
Клиент

Зарегистрирован: 12 фев 2008, 18:10
Сообщения: 3951
Карма: 249
тут я не нашел contract_parameter_type_9, там есть только contract_parameter_type_phone :(

по идее этот код должен заработать
Код:
import bitel.billing.server.util.*;
import bitel.billing.server.contract.bean.*;
import java.sql.*;
import java.math.*;

public void main( setup, con, conSlave )
{
    String query_dolg = "SELECT c.id, c.title, c.comment, cb.summa1 FROM contract_balance AS cb, contract AS c LEFT JOIN contract_payment AS pay ON c.id = cp.cid WHERE (cp.dt BETWEEN '2011-03-01' AND '2011-03-31') AND cp.id IS NULL AND c.date2 IS NULL AND c.gr = gr & (1 << 2) AND cb.cid = c.id AND cb.yy = '2011' AND cb.mm = '3' AND cb.summa1 < 0 ORDER BY c.title";
    String query      = "SELECT cpt9.phone1, cpt9.phone2, cpt9.phone3, cpt9.phone4, cpt9.phone5 FROM contract, contract_parameter_type_9 AS cpt9 LEFT JOIN contract_parameter_type_5 AS flag ON cpt5.cid = cpt9.cid WHERE cpt5.pid = 42 AND cpt5.val = 1 AND contract.id = ? ORDER BY cpt9.phone1";

    PreparedStatement ps_dolg = con.prepareStatement(query_dolg);
    ResultSet         rs_dolg = ps_dolg.executeQuery();

    int id;
    int summa;

    String title   = "";
    String comment = "";

    String phone  = "";
    String phone1 = "";
    String phone2 = "";
    String phone3 = "";
    String phone4 = "";

    while(rs_dolg.next())
    {
        id      = rs_dolg.getInt("id");
        title   = rs_dolg.getString("title");
        comment = rs_dolg.getString("comment");
        summa   = rs_dolg.getInt("summa1");

        print ("id      -> " + id);
        print ("title   -> " + title);
        print ("comment -> " + comment);
        print ("summa   -> " + summa);

        PreparedStatement ps = con.prepareStatement(query);
        ps.setInt(1, id);
        ResultSet         rs = ps.executeQuery();

        phone1 = rs.getString("phone1");
        phone2 = rs.getString("phone2");
        phone3 = rs.getString("phone3");
        phone4 = rs.getString("phone4");
        phone5 = rs.getString("phone5");

        print ("phone1 -> " + phone1);
        print ("phone2 -> " + phone2);
        print ("phone3 -> " + phone3);
        print ("phone4 -> " + phone4);
        print ("phone5 -> " + phone5);
    }
}

проверить не на чем - у меня (пока) нету 5.1 :facepalm:

я чуть изменил запросы и поправил переменные


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с SQL запросом
СообщениеДобавлено: 28 мар 2011, 15:59 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 08 мар 2007, 20:44
Сообщения: 1570
Откуда: Челябинск
Карма: 18
snark писал(а):
тут я не нашел contract_parameter_type_9, там есть только contract_parameter_type_phone :(

по идее этот код должен заработать
Код:
import bitel.billing.server.util.*;
import bitel.billing.server.contract.bean.*;
import java.sql.*;
import java.math.*;

public void main( setup, con, conSlave )
{
    String query_dolg = "SELECT c.id, c.title, c.comment, cb.summa1 FROM contract_balance AS cb, contract AS c LEFT JOIN contract_payment AS pay ON c.id = cp.cid WHERE (cp.dt BETWEEN '2011-03-01' AND '2011-03-31') AND cp.id IS NULL AND c.date2 IS NULL AND c.gr = gr & (1 << 2) AND cb.cid = c.id AND cb.yy = '2011' AND cb.mm = '3' AND cb.summa1 < 0 ORDER BY c.title";
    String query      = "SELECT cpt9.phone1, cpt9.phone2, cpt9.phone3, cpt9.phone4, cpt9.phone5 FROM contract, contract_parameter_type_9 AS cpt9 LEFT JOIN contract_parameter_type_5 AS flag ON cpt5.cid = cpt9.cid WHERE cpt5.pid = 42 AND cpt5.val = 1 AND contract.id = ? ORDER BY cpt9.phone1";

    PreparedStatement ps_dolg = con.prepareStatement(query_dolg);
    ResultSet         rs_dolg = ps_dolg.executeQuery();

    int id;
    int summa;

    String title   = "";
    String comment = "";

    String phone  = "";
    String phone1 = "";
    String phone2 = "";
    String phone3 = "";
    String phone4 = "";

    while(rs_dolg.next())
    {
        id      = rs_dolg.getInt("id");
        title   = rs_dolg.getString("title");
        comment = rs_dolg.getString("comment");
        summa   = rs_dolg.getInt("summa1");

        print ("id      -> " + id);
        print ("title   -> " + title);
        print ("comment -> " + comment);
        print ("summa   -> " + summa);

        PreparedStatement ps = con.prepareStatement(query);
        ps.setInt(1, id);
        ResultSet         rs = ps.executeQuery();

        phone1 = rs.getString("phone1");
        phone2 = rs.getString("phone2");
        phone3 = rs.getString("phone3");
        phone4 = rs.getString("phone4");
        phone5 = rs.getString("phone5");

        print ("phone1 -> " + phone1);
        print ("phone2 -> " + phone2);
        print ("phone3 -> " + phone3);
        print ("phone4 -> " + phone4);
        print ("phone5 -> " + phone5);
    }
}

проверить не на чем - у меня (пока) нету 5.1 :facepalm:

я чуть изменил запросы и поправил переменные

у меня тоже не 5.1 а 5.0!

_________________
Интернет и телефония оптом со склада, или в розницу


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с SQL запросом
СообщениеДобавлено: 28 мар 2011, 16:36 
Не в сети
Клиент

Зарегистрирован: 12 фев 2008, 18:10
Сообщения: 3951
Карма: 249
max писал(а):
snark писал(а):
тут я не нашел contract_parameter_type_9, там есть только contract_parameter_type_phone :(
...
проверить не на чем - у меня (пока) нету 5.1 :facepalm:

у меня тоже не 5.1 а 5.0!

скажите главное - работает или нет?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с SQL запросом
СообщениеДобавлено: 28 мар 2011, 23:49 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 08 мар 2007, 20:44
Сообщения: 1570
Откуда: Челябинск
Карма: 18
нет не работает, вот выхлоп
Код:
COMPLETE_TIME: 28.03.11 23:47:57
PROCESS_TIME: 21

OUT:


ERROR:


EXCEPTIONS:
Typed variable declaration : Method Invocation ps_dolg.executeQuery
Typed variable declaration : Method Invocation ps_dolg.executeQuery : at Line: 12 : in file: snark2 : ps_dolg .executeQuery ( )

Called from method: main : at Line: -1 : in file: <Called from Java Code> : <Compiled Java Code>
Target exception: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'cp.dt' in 'where clause'

   at bsh.BSHMethodInvocation.eval(Unknown Source)
   at bsh.BSHPrimaryExpression.eval(Unknown Source)
   at bsh.BSHPrimaryExpression.eval(Unknown Source)
   at bsh.BSHVariableDeclarator.eval(Unknown Source)
   at bsh.BSHTypedVariableDeclaration.eval(Unknown Source)
   at bsh.BSHBlock.evalBlock(Unknown Source)
   at bsh.BSHBlock.eval(Unknown Source)
   at bsh.BshMethod.invokeImpl(Unknown Source)
   at bsh.BshMethod.invoke(Unknown Source)
   at bsh.BshMethod.invoke(Unknown Source)
   at bsh.This.invokeMethod(Unknown Source)
   at bsh.This.invokeMethod(Unknown Source)
   at ru.bitel.bgbilling.kernel.script.server.bean.ScriptInstance.invoke(ScriptInstance.java:329)
   at bitel.billing.server.script.global.bean.GlobalScriptMachine.runScriptImpl(GlobalScriptMachine.java:130)
   at bitel.billing.server.script.global.bean.GlobalScriptMachine.runScript(GlobalScriptMachine.java:65)
   at bitel.billing.server.script.global.bean.GlobalScriptManager.executeGlobalScript(GlobalScriptManager.java:36)
   at bitel.billing.server.script.global.ActionExecuteScript$1ScriptThread.run(ActionExecuteScript.java:33)


WARNINGS:

не нашли потому что в 5.1 нету такой таблицы, а вот если вы в верхнем правом углу там переключите на 5.0 то таблица появится.

_________________
Интернет и телефония оптом со склада, или в розницу


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с SQL запросом
СообщениеДобавлено: 29 мар 2011, 16:47 
Не в сети
Клиент

Зарегистрирован: 12 фев 2008, 18:10
Сообщения: 3951
Карма: 249
max писал(а):
нет не работает
Код:
Target exception: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'cp.dt' in 'where clause'

вот такой запрос у Вас отрабатывает?
Код:
SELECT
    c.id,
    c.title,
    c.comment,
    cb.summa1
FROM
    contract_balance AS cb,
    contract AS cnt
LEFT JOIN
    contract_payment AS cp ON c.id = cp.cid
WHERE
    cp.id IS NULL
    AND
    (cp.dt BETWEEN '2011-03-01' AND '2011-03-31')
    AND
    c.date2 IS NULL
    AND
    c.gr = gr & (1 << 2)
    AND
    cb.cid = c.id
    AND
    cb.yy = '2011'
    AND
    cb.mm = '3'
    AND
    cb.summa1 < 0
ORDER BY c.title


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с SQL запросом
СообщениеДобавлено: 29 мар 2011, 17:19 
Не в сети
Клиент

Зарегистрирован: 12 фев 2008, 18:10
Сообщения: 3951
Карма: 249
max писал(а):
1. вход. остаток на начало месяца меньше нуля.
2. Нет платежей в текущем месяце.

это все у кого входящий остаток меньше либо равен нулю
Код:
SELECT
    cid
FROM
    contract_balance
WHERE
    summa1 <= 0
    AND
    yy = YEAR(NOW())
    AND
    mm = MONTH(NOW())

это все у кого нет платежей
Код:
SELECT
    cid
FROM
    contract_balance
WHERE
    summa2 = 0
    AND
    yy = YEAR(NOW())
    AND
    mm = MONTH(NOW())

много, да? ну тогда оставим только тех у кого входящий остаток меньше либо равен нулю и небыло платежей:
Код:
SELECT
    cid
FROM
    contract_balance
WHERE
    summa1 <= 0
    AND
    summa2 = 0
    AND
    yy = YEAR(NOW())
    AND
    mm = MONTH(NOW())

получится не такое уж и большое кол-во договоров ... а кто это? да вот кто:
Код:
SELECT
    title
FROM
    contract
WHERE
    id IN (
        SELECT
            cid
        FROM
            contract_balance
        WHERE
            summa1 <= 0
            AND
            summa2 = 0
            AND
            yy = YEAR(NOW())
            AND
            mm = MONTH(NOW())
    )

но сюда попали и договора у которых режим "кредит" :( чтобы их отсеять - возьмем только тех у кого режим "дебет":
Код:
SELECT
    title
FROM
    contract
WHERE
    id IN (
        SELECT
            cid
        FROM
            contract_balance
        WHERE
            summa1 <= 0
            AND
            summa2 = 0
            AND
            yy = YEAR(NOW())
            AND
            mm = MONTH(NOW())
    )
    AND
    mode = 1

осталось не так уж и много ;)

эти запросы учитывают _только_ текущий месяц и год, а т.к. записи в таблице contract_balance создаются только при наличии движения $ на счету, то эти запросы надо дорисовать чтобы можно было найти еще и тех у кого есть долги за прошлые месяцы и это, а еще это:
max писал(а):
3. В свойствах договора установлен флаг "включить в программу обзвона должников".

я, с Вашего позволения, оставлю Вам в качестве домашнего задания ;)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с SQL запросом
СообщениеДобавлено: 30 мар 2011, 00:54 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 08 мар 2007, 20:44
Сообщения: 1570
Откуда: Челябинск
Карма: 18
snark гранд мерси!
домашнее задание выполню :)
но естиь вопросег! как в этом запросе получить ещё сумму вход остатка ?

_________________
Интернет и телефония оптом со склада, или в розницу


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с SQL запросом
СообщениеДобавлено: 30 мар 2011, 15:38 
Не в сети
Клиент

Зарегистрирован: 12 фев 2008, 18:10
Сообщения: 3951
Карма: 249
это:
Код:
SELECT
    cid
FROM
    contract_balance
WHERE
    ...

возвращает ID-ы юзеров, а это:
Код:
SELECT
    cid,
    summa1
FROM
    contract_balance
WHERE
    ...

вернет помимо ID-ов юзеров еще и входящий остаток, но ... НО! но использовать summa1 в этом запросе
Код:
SELECT
    title
FROM
    contract
WHERE
    id IN (
        SELECT
            cid
        FROM
            contract_balance
        WHERE
            summa1 <= 0
            AND
            summa2 = 0
            AND
            yy = YEAR(NOW())
            AND
            mm = MONTH(NOW())
    )
    AND
    mode = 1

нельзя, потому что список ID-ов тут служат основанием для выборки ... что делать? переписать! ;)
Код:
SELECT
    c.title,
    cb.summa1
FROM
    contract AS c
LEFT JOIN
    contract_balance AS cb
ON (c.id = cb.cid)
WHERE
    c.mode = 1
    AND
    cb.summa1 <= 0
    AND
    cb.summa2 = 0
    AND
    cb.yy = YEAR(NOW())
    AND
    cb.mm = MONTH(NOW())


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с SQL запросом
СообщениеДобавлено: 30 мар 2011, 16:58 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 08 мар 2007, 20:44
Сообщения: 1570
Откуда: Челябинск
Карма: 18
snark писал(а):
это:
Код:
SELECT
    cid
FROM
    contract_balance
WHERE
    ...

возвращает ID-ы юзеров, а это:
Код:
SELECT
    cid,
    summa1
FROM
    contract_balance
WHERE
    ...

вернет помимо ID-ов юзеров еще и входящий остаток, но ... НО! но использовать summa1 в этом запросе
Код:
SELECT
    title
FROM
    contract
WHERE
    id IN (
        SELECT
            cid
        FROM
            contract_balance
        WHERE
            summa1 <= 0
            AND
            summa2 = 0
            AND
            yy = YEAR(NOW())
            AND
            mm = MONTH(NOW())
    )
    AND
    mode = 1

нельзя, потому что список ID-ов тут служат основанием для выборки ... что делать? переписать! ;)
Код:
SELECT
    c.title,
    cb.summa1
FROM
    contract AS c
LEFT JOIN
    contract_balance AS cb
ON (c.id = cb.cid)
WHERE
    c.mode = 1
    AND
    cb.summa1 <= 0
    AND
    cb.summa2 = 0
    AND
    cb.yy = YEAR(NOW())
    AND
    cb.mm = MONTH(NOW())

на основании твоего запроса попытался учесть влияние флага, и нифга не выходит, отписался в асю....

_________________
Интернет и телефония оптом со склада, или в розницу


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 32 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
POWERED_BY
Русская поддержка phpBB
[ Time : 0.082s | 78 Queries | GZIP : On ]