forum.bitel.ru
http://forum.bitel.ru/

Помогите с SQL запросом
http://forum.bitel.ru/viewtopic.php?f=19&t=5303
Страница 1 из 2

Автор:  max [ 24 мар 2011, 14:05 ]
Заголовок сообщения:  Помогите с SQL запросом

Доброго времени суток!
Стоит задача выудить из биллинга номер телефона контракта, сумма баланса на начало месяца если абонент не заплатил, для системы автоматического обзвона должников, попытался наваять запрос, но он не пашет, так как ошибочный, а знаний пока в этой области маловато, помогите кто чем может
вот что у меня получилось:
Код:
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

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

Автор:  Phricker [ 24 мар 2011, 14:12 ]
Заголовок сообщения:  Re: Помогите с SQL запросом

Какая версия биллинга?
Если судить по contract_parameter_type_9 то 4.6 потому что в 5.1. другие таблицы. Прав?

Автор:  max [ 24 мар 2011, 15:03 ]
Заголовок сообщения:  Re: Помогите с SQL запросом

нет, 5.0

Автор:  skn [ 24 мар 2011, 15:10 ]
Заголовок сообщения:  Re: Помогите с SQL запросом

Код:
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:20 ]
Заголовок сообщения:  Re: Помогите с SQL запросом

спс! дело было в заглавной букве и запятой!

Автор:  skyb [ 24 мар 2011, 15:37 ]
Заголовок сообщения:  Re: Помогите с SQL запросом

мож на вики? чтоб не потерялся?

Автор:  max [ 24 мар 2011, 15:41 ]
Заголовок сообщения:  Re: Помогите с SQL запросом

а как можно в этот запрос интегрировать вот этот?
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

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

Автор:  max [ 24 мар 2011, 15:41 ]
Заголовок сообщения:  Re: Помогите с SQL запросом

skyb писал(а):
мож на вики? чтоб не потерялся?

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

Автор:  skyb [ 24 мар 2011, 15:42 ]
Заголовок сообщения:  Re: Помогите с SQL запросом

max писал(а):
skyb писал(а):
мож на вики? чтоб не потерялся?

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

ждем ;)

Автор:  max [ 24 мар 2011, 15:43 ]
Заголовок сообщения:  Re: Помогите с SQL запросом

to skyb может поможешь? а то я не силён в SQL.
начал писать на виккки
http://wiki.bgbilling.ru/index.php/%D0% ... 1%81%D1%8B

Автор:  skyb [ 24 мар 2011, 15:50 ]
Заголовок сообщения:  Re: Помогите с SQL запросом

max писал(а):
to skyb может поможешь? а то я не силён в SQL.

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

Автор:  max [ 24 мар 2011, 17:43 ]
Заголовок сообщения:  Re: Помогите с SQL запросом

стукнул :)

Автор:  max [ 25 мар 2011, 15:44 ]
Заголовок сообщения:  Re: Помогите с SQL запросом

совместно со 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 запросом, но я незнаю как...

Автор:  snark [ 26 мар 2011, 19:20 ]
Заголовок сообщения:  Re: Помогите с SQL запросом

типа того:
Код:
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);
    }
}

Автор:  max [ 27 мар 2011, 00:56 ]
Заголовок сообщения:  Re: Помогите с SQL запросом

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:

Автор:  dimOn [ 27 мар 2011, 15:06 ]
Заголовок сообщения:  Re: Помогите с SQL запросом

Цитата:
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();

Автор:  max [ 27 мар 2011, 15:29 ]
Заголовок сообщения:  Re: Помогите с SQL запросом

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

Автор:  dimOn [ 28 мар 2011, 02:42 ]
Заголовок сообщения:  Re: Помогите с SQL запросом

ps на ps_dolg

Автор:  snark [ 28 мар 2011, 11:37 ]
Заголовок сообщения:  Re: Помогите с SQL запросом

код вообще писался на коленке и поэтому не факт что будет работать, хотя по идее должен ... меня больше волнует другое - Вы уверены что запрос, который в "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:

Автор:  max [ 28 мар 2011, 15:18 ]
Заголовок сообщения:  Re: Помогите с SQL запросом

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:

Автор:  max [ 28 мар 2011, 15:23 ]
Заголовок сообщения:  Re: Помогите с SQL запросом

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/]

Автор:  snark [ 28 мар 2011, 15:42 ]
Заголовок сообщения:  Re: Помогите с SQL запросом

тут я не нашел 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:

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

Автор:  max [ 28 мар 2011, 15:59 ]
Заголовок сообщения:  Re: Помогите с SQL запросом

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!

Автор:  snark [ 28 мар 2011, 16:36 ]
Заголовок сообщения:  Re: Помогите с SQL запросом

max писал(а):
snark писал(а):
тут я не нашел contract_parameter_type_9, там есть только contract_parameter_type_phone :(
...
проверить не на чем - у меня (пока) нету 5.1 :facepalm:

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

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

Автор:  max [ 28 мар 2011, 23:49 ]
Заголовок сообщения:  Re: Помогите с SQL запросом

нет не работает, вот выхлоп
Код:
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 то таблица появится.

Автор:  snark [ 29 мар 2011, 16:47 ]
Заголовок сообщения:  Re: Помогите с SQL запросом

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

Автор:  snark [ 29 мар 2011, 17:19 ]
Заголовок сообщения:  Re: Помогите с SQL запросом

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. В свойствах договора установлен флаг "включить в программу обзвона должников".

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

Автор:  max [ 30 мар 2011, 00:54 ]
Заголовок сообщения:  Re: Помогите с SQL запросом

snark гранд мерси!
домашнее задание выполню :)
но естиь вопросег! как в этом запросе получить ещё сумму вход остатка ?

Автор:  snark [ 30 мар 2011, 15:38 ]
Заголовок сообщения:  Re: Помогите с SQL запросом

это:
Код:
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())

Автор:  max [ 30 мар 2011, 16:58 ]
Заголовок сообщения:  Re: Помогите с SQL запросом

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())

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

Страница 1 из 2 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/