2016-06-30 27 views
0

モーニングPHPのmysqliの和

私はユーザーセッションに関連付けられているMySQLのDBの列のデータを照会に基づいてPHPのmysqliの和クエリを記述しようとしています。したがって、スクリプトは、セッションAのユーザー名に関連付けられたすべてのdbデータを列Aで取得し、次に列Bから変数を抽出し、次に列B変数に一致する列Cの値を合計します。

Heresは私が持っているもので、結果として0を生成し、SalesのC列のデータの合計ではありません。

のような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 = '"。$ _ SESSION [ "username"]。 "'") – Spanner

+0

一般的に - はい。しかし、やはりこのセッション変数で何を持っているかを確認し、そこにユーザ名が存在することを確認してください。 – mitkosoft

+0

ユーザー名のエコーは返されても問題ありませんが、上のコードはすべての部門費用を引き上げるものではありません。理由を理解しようとしています。 – 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"; 
?> 

これは私のために働いた。