2016-06-30 1 views
0

아침PHP는 mysqli 합

I 사용자 세션과 관련된 MySQL의 DB 컬럼 데이터를 쿼리를 기반으로 PHP는 mysqli 합계 쿼리를 작성하는 것을 시도하고있다. 따라서 스크립트는 A 열의 세션 사용자 이름과 관련된 모든 db 데이터를 가져온 다음 B 열에서 변수를 추출한 다음 B 열 변수와 일치하는 C 열 값을 합산해야합니다.

Heres는 내가 판매하는 C 열에있는 데이터의 합계가 아니라 결과로 0을 생성합니다.

같은

DB 테이블 같습니다

Column A/Column B/Column C 

Bill /Sales /15.00 

Helen /Sales /32.00 

James /Accounts/20.00 

.. 

현재 코드는 다음과 같습니다 환영

<?php 
    session_start(); 
    $db = new mysqli('DBHOST.com', 'DBUsername', 'DBPassword', 'DBNAME'); 
    if ($db->connect_errno > 0) { 
     die('Unable to connect to database [' . $db->connect_error . ']'); 
    } 
    $sql = mysqli_query($db, "SELECT * FROM Table_Name WHERE ColumnA = '" . $_SESSION["username"] . "'"); 
    $count = mysqli_num_rows($sql); 
    if ($count == 1) { 
     $output = mysqli_fetch_assoc($sql); 
     $columnBresult = trim($output['ColumnB']); 
    } 
    $sumquery = mysqli_query($db, "SELECT SUM(ColumnC) as total FROM Table_Name WHERE ColumnB = '$columnBresult'"); 
    $row = mysqli_fetch_assoc($sumquery); 
    $sum = $row['total']; 
    echo $sum > 0 || $sum !== null ? $sum : "0"; 
?> 

어떤 아이디어 모든 검사의 상단에

+0

코드가 정상적으로 보입니다. 세션 변수에 할당 된 사용자 이름이 있는지 확인하십시오. 'print_r ($ _ SESSION)'이'session_start()'다음에 알려주는 것은 무엇입니까? – mitkosoft

+0

세션 시작은 다른 페이지의 DB 로그인에서 이월 된 사용자 이름입니다. 올바른 값이고 DB에 있습니다. 여기에 나와 있지 않은 사용자에게 인사하는 스크립트의 일부로 페이지를 더 올려 놓았습니다. – Spanner

+0

그냥 분명히 B 열의 Bills 관련 부서 이름을 기반으로 C 열의 총계를 얻으려고합니다. – Spanner

답변

1

$_SESSION['username']에있는 사용자 이름 값이 .. 변하기 쉬운. 또한 당신은 같은 테이블에 가입하여 단일 쿼리와 같은 계산을 얻을 수 있습니다

DB 테이블 :

mysql> select * from table_name; 
+---------+----------+---------+ 
| ColumnA | ColumnB | ColumnC | 
+---------+----------+---------+ 
| Bill | Sales |  15 | 
| Helen | Sales |  32 | 
| James | Accounts |  20 | 
+---------+----------+---------+ 
3 rows in set 

검색어 :

결과
SELECT 
    SUM(t1.ColumnC) AS total 
FROM 
    table_name t1 
    INNER JOIN table_name t2 ON t1.ColumnB = t2.ColumnB 
WHERE 
    t2.ColumnA = 'Bill' 

:

+-------+ 
| total | 
+-------+ 
| 47.00 | 
+-------+ 
1 row in set 
+0

그래서 PHP는 $ result = mysqli_query ($ db, "SELECT SUM (t1.ColumnC)"를 t1.ColumnB = t2.ColumnB WHERE t2.ColumnA = ' "로 시작하여 총 FROM t1 INNER JOIN t1 t2로 표시해야합니다. $ _ SESSION [ "username"]. " '") – Spanner

+0

일반적으로 - 예. 그러나이 세션 변수에서 무엇을 가지고 있는지 확인하고 사용자 이름이 있는지 확인하십시오. – mitkosoft

+0

사용자 이름의 echo 메아리가 반환되지만 괜찮습니다. 위의 코드는 모든 부서 비용을 되돌려주지 않습니다. 이유를 알아내는 것뿐입니다. – Spanner

0

을 고정 :

<?php 

session_start(); 

$db = new mysqli('DBHost.com', 'DBUsername', 'DBPassword', 'DBName'); 
if($db->connect_errno > 0){ 
die('Unable to connect to database [' . $db->connect_error . ']'); 
} 

$sql = mysqli_query($db, "SELECT ColumnB FROM Table_Name WHERE ColumnA = '".$_SESSION["username"]."'"); 
$fetch = mysqli_fetch_assoc($sql); 
$dept = $fetch['ColumnB']; 


$result = mysqli_query($db, "SELECT SUM(ColumnC) AS total FROM Table_Name WHERE ColumnB = '$dept'"); 
$row = mysqli_fetch_assoc($result); 
$sum = $row['total']; 

echo $sum > 0 || $sum!==null ? $sum : "0"; 
?> 

이것은 나를 위해 일했습니다.