我想避免使用真实的表格作为解决方法。我正在尝试连接两个表并获取我调用的列的唯一值 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())
检查时,该错误可能是在创建第二个临时表(在第一个代码示例中)时出现的,或者是在 UPDATE
中出现的。当使用(SELECT ...) t2
时(在第二个代码示例中)。
最佳答案
您不能使用mysql_query()
执行多个查询,您应该使用mysqli_multi_query去做这个。 mysql_*
函数中没有与 mysqli_multi_query
等效的函数。
您可以在同一代码中同时使用mysql_*
和mysqli_*
,但要小心不要混淆它们,就像使用mysql_open()打开和使用mysqli_query()查询一样反之亦然。一旦使用 mysqli_open()
打开连接,您就应该在该连接上仅使用 mysqli_*
函数。这也适用于 mysql_*
连接。但您可以通过同一代码同时打开两个连接。
警告: mysql_
函数自 PHP 5.5.0 起已弃用,并将在将来删除。相反,MySQLi或PDO_MySQL应使用扩展名。
关于php - 在单个 MySQL 查询中使用多个临时表(适用于 phpMyAdmin,但不适用于 PHP),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21907786/