繁体   English   中英

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

[英]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_函数,以后会删除它。 相反,应使用MySQLiPDO_MySQL扩展。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM