2016-06-25 2 views
-1

에 워크 벤치하지만 오류가 작동하지만 반환 MySQL의 문은 다음과 같은 SQL 코드는 MySQL의 워크 벤치에서 잘 실행되는 PHP

"문자열 (228)"당신은 당신의 SQL 구문에 오류가 있습니다; 오른쪽 구문 에 대해 MariaDB 서버 버전에 해당하는 설명서 을 확인하십시오. 'p2.this_year, year (p.PAID_DATE)를 current_year, c1.s1, c2.p1, c3.p2, ly.last_로 선택하십시오. 'PHP 라인 6 "에서.

나는. 사전에. 사람이 어떤 아이디어가 있는지 궁금. 아무 소용에 대한 답변에 대한 감사를 검색 한

$dbinfo = dbinfo(); 
$con = mysqli_connect($dbinfo['localhost'],$dbinfo['localuser'],$dbinfo['localpass'],$dbase); 
if (!$con) die('Could not connect: ' . mysqli_error($con)); 

$sql = " 
SET @startdate = DATE(CURDATE()- INTERVAL DAYOFYEAR(CURDATE())+1 DAY), @enddate = CURDATE(), 
    @laststart = DATE_SUB(@startdate, INTERVAL 1 YEAR), 
    @lastend = DATE_SUB(@enddate, INTERVAL 1 YEAR) 
    ; 

SELECT p2.this_year,year(p.PAID_DATE) as current_year,c1.s1,c2.p1,c3.p2,ly.last_year, 
    lyc1.s1,lyc2.p1,lyc3.p2 
FROM btb.payments as p 

join (
    select CLIENTID,sum(TOTAL) this_year,PAID_DATE 
    from btb.payments 
    where PAID_DATE between @startdate and @enddate 
) as p2 

join (
    select id_no,count(SUMMER_PT1) S1 
    from btb.Client 
    where SUMMER_PT1 <> '' 
) as c1 
    on c1.ID_NO = p.CLIENTID 

join (
    select id_no,count(PART1) P1 
    from btb.Client 
    where PART1 <> '' 
) as c2 

join (
    select id_no,count(PART2) P2 
    from btb.Client 
    where PART2 <> '' 
) as c3 

join (
    SELECT CLIENTID,sum(TOTAL) as last_year 
    FROM btb.payments 
    where PAID_DATE between @laststart and @lastend 
) as ly 

join (
SELECT d.CLIENTID,d.SESSION,count(p.CLIENTID) s1 
FROM btb.Details d 
join btb.payments p 
    on p.CLIENTID = d.CLIENTID 
where p.PAID_DATE between @laststart and @lastend 
    and d.year = year(@laststart) 
    and d.SESSION = 'S1' 
) as lyc1 
    -- on c1.ID_NO = p.CLIENTID 

join (
SELECT d.CLIENTID,d.SESSION,count(p.CLIENTID) p1 
FROM btb.Details d 
join btb.payments p 
    on p.CLIENTID = d.CLIENTID 
where p.PAID_DATE between @laststart and @lastend 
    and d.year = year(@laststart) 
    and d.SESSION = 'P1' 
) as lyc2 

join (
SELECT d.CLIENTID,d.SESSION,count(p.CLIENTID) p2 
FROM btb.Details d 
join btb.payments p 
    on p.CLIENTID = d.CLIENTID 
where p.PAID_DATE between @laststart and @lastend 
    and d.year = year(@laststart) 
    and d.SESSION = 'P2' 
) as lyc3 

where p.PAID_DATE between @startdate and @enddate 
;"; 

$result = mysqli_query($con, $sql); 
if($result === false) { 
    var_dump(mysqli_error($con)); 
} 
else { 
    print_r(mysqli_num_rows($result)); 
} 
+0

이것은 PHP와 관련이 있습니까? 귀하의 코드에 SQL 만 포함 된 것 같습니다. – YakovL

+0

죄송합니다. PHP 코드도 편집하고 추가했습니다. –

+0

하나의 mysqli 쿼리에서 여러 개의 sql 문을 사용할 수 있습니까? 같은 쿼리에서 간단한 '집합'과 간단한 쿼리를 시도해 보겠습니다. –

답변

1

그것은 그 이상의 SQL을 표시 문이 mysqli_query에서 작동하지 않아서 코드가 다음과 같이 바뀌 었습니다.

$dbase = "btb"; 

$dbinfo = dbinfo(); 
$con = mysqli_connect($dbinfo['localhost'],$dbinfo['localuser'],$dbinfo['localpass'],$dbase); 
if (!$con) die('Could not connect: ' . mysqli_error($con)); 
$startdate = date('Y-m-d', strtotime('01/01')); 
$enddate = date("Y-m-d"); 
$startlast = date("Y-m-d", strtotime($startdate . ' -1 year')); 
$endlast = date("Y-m-d", strtotime($enddate . ' -1 year')); 

echo "$startdate - $enddate = $startlast = $endlast"; 

$sql = " 
SELECT 
    p2.this_year,year(p.PAID_DATE) as current_year,c1.s1,c2.p1,c3.p2,ly.last_year, 
    lyc1.s1 as ly_s1,lyc2.p1 as ly_p1,lyc3.p2 as ly_p2 

FROM $dbase.payments p 

join (
    select CLIENTID,sum(TOTAL) this_year,PAID_DATE 
    from $dbase.payments 
    where PAID_DATE between '$startdate' and '$enddate' 
) as p2 

join (
    select id_no,count(SUMMER_PT1) S1 
    from $dbase.Client 
    where SUMMER_PT1 <> '' 
) as c1 
    on c1.ID_NO = p.CLIENTID 

join (
    select id_no,count(PART1) P1 
    from $dbase.Client 
    where PART1 <> '' 
) as c2 

join (
    select id_no,count(PART2) P2 
    from $dbase.Client 
    where PART2 <> '' 
) as c3 

join (
    SELECT CLIENTID,sum(TOTAL) as last_year 
    FROM $dbase.payments 
    where PAID_DATE between '$startlast' and '$endlast' 
) as ly 

join (
SELECT d.CLIENTID,d.SESSION,count(p.CLIENTID) s1 
FROM $dbase.Details d 
join $dbase.payments p 
    on p.CLIENTID = d.CLIENTID 
where p.PAID_DATE between '$startlast' and '$endlast' 
    and d.year = year('$startlast') 
    and d.SESSION = 'S1' 
) as lyc1 

join (
SELECT d.CLIENTID,d.SESSION,count(p.CLIENTID) p1 
FROM $dbase.Details d 
join $dbase.payments p 
    on p.CLIENTID = d.CLIENTID 
where p.PAID_DATE between '$startlast' and '$endlast' 
    and d.year = year('$startlast') 
    and d.SESSION = 'P1' 
) as lyc2 

join (
SELECT d.CLIENTID,d.SESSION,count(p.CLIENTID) p2 
FROM $dbase.Details d 
join $dbase.payments p 
    on p.CLIENTID = d.CLIENTID 
where p.PAID_DATE between '$startlast' and '$endlast' 
    and d.year = year('$startlast') 
    and d.SESSION = 'P2' 
) as lyc3 

where p.PAID_DATE between '$startdate' and '$enddate' 
;"; 

$result = mysqli_query($con, $sql); 
while($row = mysqli_fetch_assoc($result)) { 
    //print_r($row); 
    $this_year = $row['this_year']; 
    $year = $row['current-year']; 
    $this_s1 = $row['s1']; 
    $this_p1 = $row['p1']; 
    $this_p2 = $row['p2']; 
    $last_year = $row['last_year']; 
    $last_s1 = $row['ly_s1']; 
    $last_p1 = $row['ly_p1']; 
    $last_p2 = $row['ly_p2']; 
} 
관련 문제