2013-01-22 93 views
0

我有使用MySQL Workbench工作的以下動態數據透視表。然而我有使用PHP執行它的問題。過去7天我嘗試過這麼多,但它不起作用。需要一些關於PHP代碼如何運行的信息。MySQL動態數據透視表與PHP

SET @sql = NULL; 
SET group_concat_max_len=15000; 
SELECT 
    GROUP_CONCAT(DISTINCT 
    CONCAT(
     'COUNT(IF(int_supplierid = ', 
     int_supplierid, 
     ', int_projectid, NULL)) AS NO', 
     int_supplierid 
    ) 
    ORDER BY int_supplierid) INTO @sql 
FROM tbl_po; 
SET @sql = CONCAT('SELECT int_userid, ', @sql, ' FROM tbl_po GROUP BY int_userid'); 
PREPARE stmt FROM @sql; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 

我用的第一個php代碼;

<?php 
require_once('myconn.php'); 

$approval="SET @sql = NULL; 
SET group_concat_max_len=15000;" 

$approval3=" 
SELECT 
    GROUP_CONCAT(DISTINCT 
    CONCAT(
     'COUNT(IF(int_supplierid = ', 
     int_supplierid, 
     ', int_projectid, NULL)) AS NO', 
     int_supplierid 
    ) 
    ORDER BY int_supplierid) INTO @sql 
FROM tbl_po; 
SET @sql = CONCAT('SELECT int_userid, ', @sql, ' FROM tbl_po GROUP BY int_userid'); 
PREPARE stmt FROM @sql; 
EXECUTE stmt;" 

$RSFeed2 = mysql_query($approval) or die(mysql_error()); 
$RSFeed2 = mysql_query($approval3) or die(mysql_error()); 
$totalRows_RSFeed = mysql_num_rows($RSFeed2); 
echo $RSFeed2['int_userid']; 
echo $totalRows_RSFeed; 
?> 

第二個我用過並試過;

$host="127.0.0.1"; 
$port=3306; 
$socket=""; 
$user="root"; 
$password="pwd"; 
$dbname="kelupis"; 

$con = new mysqli($host, $user, $password, $dbname, $port, $socket) 
    or die ('Could not connect to the database server' . mysqli_connect_error()); 

//1st query 
$query1 = "SET @sql = NULL; 
SET group_concat_max_len=15000; SELECT GROUP_CONCAT(DISTINCT  CONCAT('COUNT(IF(int_supplierid = ',int_supplierid,', int_projectid, NULL)) AS NO',int_supplierid) ORDER BY int_supplierid) INTO @sql FROM tbl_po;"; 


if ($stmt = $con->prepare($query1)) { 
    $stmt->execute(); 
    $stmt->bind_result($int_supplierid); 
    while ($stmt->fetch()) { 
     printf("%s\n", $int_supplierid); 
    } 
} 
+1

你可能要張貼您使用的是執行這個查詢一些PHP代碼。 – inhan

+0

這是一個存儲過程嗎? –

+0

什麼對它不起作用?它會拋出一個錯誤嗎? – showdev

回答

0

PHP的mysql API不支持多重查詢。

換句話說,您無法準備和執行包含多個用分號分隔的SQL語句的字符串。

同樣,mysqli不支持使用普通的mysqli :: query()函數進行多重查詢。您必須使用mysqli::multi_query()

但多查詢是really a bad idea。你應該堅持一個接一個地執行語句。

PS:從PHP 5.3.0開始,mysql的擴展名爲deprecated anyway,所以您應該在任何新代碼中使用mysqli或PDO。


我從您的示例中看到您正在嘗試執行動態數據透視。您需要爲每個供應商提供一列,並且該列的值應爲該供應商的計數。

這是更簡單,更高效輸出這些計數爲,不列:

$query = "SELECT int_supplierid, COUNT(int_projectid) 
    FROM tbl_po GROUP BY int_supplierid"; 

if (!($stmt = $con->prepare($query))) { 
    die($con->error); 
} 
if (!$stmt->execute()) { 
    die($stmt->error); 
} 
$stmt->bind_result($int_supplierid, $no); 
while ($stmt->fetch()) { 
    printf("%s: %d\n", $int_supplierid, $no); 
} 
+0

對不起比爾。我嘗試過並嘗試過。休息一下。重複一遍又一遍地重做。我似乎無法得到它。在這裏認真需要幫助 – Engkalak