Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 基于表中的不同值使用列进行查询_Php_Mysql_Sql_Dynamic - Fatal编程技术网

Php 基于表中的不同值使用列进行查询

Php 基于表中的不同值使用列进行查询,php,mysql,sql,dynamic,Php,Mysql,Sql,Dynamic,我有一张桌子,里面有三根柱子。位置标识、产品标识和数量: LOCATION_ID | PRODUCT_ID | QTY -------------------------------- 1 1 1 2 1 3 1 3 5 2 3 2 2

我有一张桌子,里面有三根柱子。位置标识、产品标识和数量:

LOCATION_ID |   PRODUCT_ID    |  QTY
--------------------------------
1                   1              1
2                   1              3
1                   3              5
2                   3              2
2                   4              2
1                   4              5
每次产品进出某个位置时,都会在此表中创建或更新一行

是否可以根据表中的位置ID添加列

我希望结果是这样的:

PRODUCT_ID | 1 | 2 |
--------------------
    1        1   3
    3        5   2
    4        5   2 

如果以后添加了更多的LOCATION\u ID,则查询中将有一个名为LOCATION ID(3)的新列。

对此,您必须使用动态SQL

SET@sql=NULL;
选择组_CONCAT(不同
CONCAT('SUM(位置id='时的情况),位置id,
'然后数量结束)`',位置`标识'`'))
进入@sql
来自表1;
设置@sql=CONCAT('SELECT product_id',@sql,'
来自表1
按产品分组_id');
从@sql准备stmt;
执行stmt;
解除分配准备stmt;
输出:

| PRODUCT_ID | 1 | 2 | |------------|---|---| | 1 | 1 | 3 | | 3 | 5 | 2 | | 4 | 5 | 2 | 并使用它

CALL products_by_location();

下面是演示

的工作原理,就像我创建和调用存储过程时一样,完全符合我的要求!但是,当我试图在phpMyAdmin中直接运行动态sql时,我得到了以下错误:#1243-指定要执行的未知准备语句处理程序(stmt)。有什么想法吗?通过删除BEGIN、取消分配PREPARE stmt使其正常工作;结束