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

时间:2014-02-20 12:26:54

标签: php mysql sql phpmyadmin

我想避免使用真实表作为解决方法。我正在尝试连接两个表并为我正在调用unique_values_needed的列获取唯一值,同时在重复real_secondary_table_primary_key时存在值11的优先级。

这是代码(它在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中(在第二个代码示例)。

1 个答案:

答案 0 :(得分:0)

您无法使用mysql_query()执行多个查询您应该使用mysqli_multi_query执行此操作。 mysqli_multi_query函数中没有等效mysql_*

您可以在同一代码中同时使用mysql_*mysqli_*,但要注意不要将它们与mysql_open()打开,并使用mysqli_query()查询,反之亦然。使用mysqli_open()打开连接后,您应该只在该连接上使用mysqli_*个函数。这也适用于mysql_*连接。但是,您可以从同一代码同时打开两个连接。

警告: mysql_函数自PHP 5.5.0起已弃用,将来会被删除。相反,应使用MySQLiPDO_MySQL扩展名。