[英]Using multiple temporary tables in a single MySQL query (works in phpMyAdmin, but not PHP)
我想避免使用实际表作为解决方法。 我试图连接两个表,并为我调用unique_values_needed
的列获取唯一值,同时还将值11优先出现在重复的real_secondary_table_primary_key
。
这是代码(它在phpMyAdmin中起作用,但在PHP中不起作用):
CREATE TEMPORARY TABLE IF NOT EXISTS temporary_table_1 AS (SELECT real_main_table.*, real_secondary_table.real_secondary_table_primary_key FROM real_main_table LEFT JOIN 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); CREATE TEMPORARY TABLE IF NOT EXISTS temporary_table_2 AS (SELECT real_main_table.*, real_secondary_table.real_secondary_table_primary_key FROM real_main_table LEFT JOIN 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); UPDATE 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; SELECT * FROM temporary_table_1 GROUP BY unique_values_needed ORDER BY temporary_table_1.date DESC;
我也尝试了以下方法(再次,它在phpMyAdmin中有效,但在PHP中仍然无效):
CREATE TEMPORARY TABLE IF NOT EXISTS temporary_table_1 AS (SELECT real_main_table.*, real_secondary_table.real_secondary_table_primary_key FROM real_main_table LEFT JOIN 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); UPDATE temporary_table_1 t1, ( SELECT real_main_table.*, real_secondary_table.real_secondary_table_primary_key FROM real_main_table LEFT JOIN 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; SELECT * FROM temporary_table_1 GROUP BY unique_values_needed ORDER BY temporary_table_1.date DESC;
当我使用mysql_query($query) or die(mysql_error())
,错误可能是在创建第二个临时表时(在第一个代码示例中),或者是在使用(SELECT ...) t2
时的UPDATE
(在第二个代码示例中)。
您不能使用mysql_query()
执行多个查询。您应该使用mysqli_multi_query来执行此操作。 mysql_*
函数中没有mysqli_multi_query
等效项。
您可以在同一代码中同时使用mysql_*
和mysqli_*
,但请注意不要像使用mysql_open()打开并使用mysqli_query()查询那样混淆它们,反之亦然。 使用mysqli_open()
打开连接后,应仅在该连接上使用mysqli_*
函数。 这也适用于mysql_*
连接。 但是您可以使用相同的代码同时打开两个连接。
警告:从PHP 5.5.0开始不推荐使用mysql_
函数,以后会删除它。 相反,应使用MySQLi或PDO_MySQL扩展。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.