在单个 MySQL 查询中使用多个临时表(适用于 phpMyAdmin,但不适用于 PHP)
Posted
技术标签:
【中文标题】在单个 MySQL 查询中使用多个临时表(适用于 phpMyAdmin,但不适用于 PHP)【英文标题】:Using multiple temporary tables in a single MySQL query (works in phpMyAdmin, but not PHP) 【发布时间】:2014-03-21 09:28:36 【问题描述】:我想避免使用真实表格作为解决方法。我正在尝试加入两个表并为我调用的列获取唯一值unique_values_needed
,同时当值 11 重复出现时优先考虑值 11real_secondary_table_primary_key
。
这是代码(它在 phpMyAdmin 中有效,但在 PHP 中无效):
如果不存在则创建临时表temporary_table_1 AS (选择 real_main_table.*, real_secondary_table.real_secondary_table_primary_key FROM real_main_table 左连接 real_secondary_table ON real_secondary_table.real_main_table_primary_key = real_main_table.real_main_table_primary_key ORDER BY real_main_table.date DESC); 如果不存在则创建临时表temporary_table_2 AS (选择 real_main_table.*, real_secondary_table.real_secondary_table_primary_key FROM real_main_table 左连接 real_secondary_table ON real_secondary_table.real_main_table_primary_key = real_main_table.real_main_table_primary_key ORDER BY real_main_table.date DESC); 更新temporary_table_1 t1,temporary_table_2 t2 SET t1.real_secondary_table_primary_key = t2.real_secondary_table_primary_key WHERE t1.real_main_table_primary_key = t2.real_main_table_primary_key AND t1.real_secondary_table_primary_key 11 AND t2.real_secondary_table_primary_key = 11; 选择 * FROM 临时表 1 GROUP BY unique_values_needed 按temporary_table_1.date DESC排序;我也尝试了以下方法(同样,它在 phpMyAdmin 中有效,但在 PHP 中仍然无效):
如果不存在则创建临时表temporary_table_1 AS (选择 real_main_table.*, real_secondary_table.real_secondary_table_primary_key FROM real_main_table 左连接 real_secondary_table ON real_secondary_table.real_main_table_primary_key = real_main_table.real_main_table_primary_key ORDER BY real_main_table.date DESC); 更新temporary_table_1 t1,( 选择 real_main_table.*, real_secondary_table.real_secondary_table_primary_key FROM real_main_table 左连接 real_secondary_table ON real_secondary_table.real_main_table_primary_key = real_main_table.real_main_table_primary_key ORDER BY real_main_table.date DESC) t2 SET t1.real_secondary_table_primary_key = t2.real_secondary_table_primary_key WHERE t1.real_main_table_primary_key = t2.real_main_table_primary_key AND t1.real_secondary_table_primary_key 11 AND t2.real_secondary_table_primary_key = 11; 选择 * FROM 临时表 1 GROUP BY unique_values_needed 按temporary_table_1.date DESC排序;当我使用mysql_query($query) or die(mysql_error())
检查时,错误应该是在创建第二个临时表时(在第一个代码示例中),或者在UPDATE
中使用(SELECT ...) t2
(在第二个代码示例中)。
【问题讨论】:
提供SHOW CREATE TABLE real_main_table;
、SHOW CREATE TABLE real_secondary_table;
和所需的输出。还有read this
我很困惑——这不只是输出制作表格所需的 SQL 吗?你想让我把表格贴在这里吗?编辑:没关系,我看到你的问题已经澄清了。
你确定你从 php 端使用相同的连接(会话)到 db 吗?还发布您收到的错误
mysql_query
应该只执行一条语句。您应该使用 mysqli_multi_query ,抱歉我不知道 mysql_* 等价物。
已弃用:mysql 扩展已弃用,将来将被删除:使用 mysqli 或 PDO
【参考方案1】:
您不能使用mysql_query()
执行多个查询,您应该使用mysqli_multi_query 来执行此操作。 mysql_*
函数中没有与 mysqli_multi_query
等效的函数。
您可以在同一代码中同时使用mysql_*
和mysqli_*
,但请注意不要将它们混淆起来,例如 open 与 mysql_open() 并使用 mysqli_query() 查询,反之亦然。使用mysqli_open()
打开连接后,您应该只在该连接上使用mysqli_*
函数。这也适用于mysql_*
连接。但是您可以使用相同的代码同时打开两个连接。
警告: mysql_
函数自 PHP 5.5.0 起已弃用,将来将被删除。相反,应使用 MySQLi 或 PDO_MySQL 扩展名。
【讨论】:
以上是关于在单个 MySQL 查询中使用多个临时表(适用于 phpMyAdmin,但不适用于 PHP)的主要内容,如果未能解决你的问题,请参考以下文章