php - 在单个 MySQL 查询中使用多个临时表(适用于 phpMyAdmin,但不适用于 PHP)

标签 php mysql sql phpmyadmin

我想避免使用真实的表格作为解决方法。我正在尝试连接两个表并获取我调用的列的唯一值 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 起已弃用,并将在将来删除。相反,MySQLiPDO_MySQL应使用扩展名。

关于php - 在单个 MySQL 查询中使用多个临时表(适用于 phpMyAdmin,但不适用于 PHP),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21907786/

相关文章:

php - 如何在数据库中绘制名称

SQL 服务器 Where 子句变量可能为空

sql - 行号重置

javascript - 如何使用 javascript 重定向到另一个 php 文件

php - 从 MySQL 表中选择 PHP 时间戳早于 X 的行

mysql - 数据库设计: I want to store the type of a house (apartment,别墅、工作室等..)

用于简单插入 MySQL 的 PHP PDO 安全程序

php - 通过 PHP 插入/更新 MySQL 表,行将更新但不会插入。

php - 带有准备语句的 PDO 动态查询

sql - 反连接和反半连接有什么区别?