首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于PHP的MySQL动态透视表

基于PHP的MySQL动态透视表
EN

Stack Overflow用户
提问于 2013-01-22 01:00:00
回答 1查看 2.9K关注 0票数 0

我有以下使用MySQL工作台工作的动态支点。但是,我在使用PHP执行它时遇到了问题。在过去的7天里,我尝试了这么多次,但它只是不起作用。需要了解一下PHP代码是如何运行的。

代码语言:javascript
复制
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代码;

代码语言:javascript
复制
<?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;
?>

我用过的第二个,我试过的;

代码语言:javascript
复制
$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);
    }
}
EN

回答 1

Stack Overflow用户

发布于 2013-01-22 06:13:46

PHP的mysql不支持多查询。

换句话说,您无法准备和执行包含多个SQL语句的字符串,该字符串由分号分隔。

同样,mysqli不支持使用普通mysqli::query()函数进行多查询。您必须使用查询()

但是多查询是真是个坏主意。你应该一个接一个地执行语句。

PS: mysql扩展是PHP5.3.0中的不以为然,所以在任何新代码中都应该使用mysqli或PDO。

我从你的例子中看到,你试图做一个动态的支点。您希望为每个supplierid设置一个列,并且该列的值应该是该supplierid的计数。

将这些计数输出为行而不是列要简单得多,效率也要高得多:

代码语言:javascript
复制
$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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14449928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档