【发布时间】:2015-06-07 09:41:46
【问题描述】:
我需要关于我正在编写的 PHP/MySQL 代码的建议。我需要做的是创建一个临时表,然后从中选择。问题是临时表只在创建它的查询期间持续存在,所以 PHP 中的第二个查询是空的。
这是两个查询,我认为解决方案是将它们合并到一个查询中,但到目前为止,我厌倦了没有任何工作。
如果一个接一个地执行,下面的查询在 phpMyAdmin 中有效。
临时表查询:
$sql_temp_table = "CREATE TEMPORARY TABLE IF NOT EXISTS
tbl_temp (id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY) AS
(SELECT
SUM(number_active_ads) as active_ads,
MONTH(create_date) as month,
YEAR(create_date) as year,
dealer_id as dealer_id
FROM tbl_active_ads
WHERE dealer_id = '".$rs->fields['id']."'
GROUP BY year, month
ORDER BY id)";
$rs_temp_table = $db -> Execute($sql_temp_table);
第二个SELECT查询:
$qry_chk_active_ads = "SELECT
a.*,
t.user_dealer_id,
t.dealer_payment_for_month,
t.dealer_payment_for_year
FROM tbl_temp as a
LEFT OUTER JOIN tbl_transaction as t
ON (a.dealer_id = t.user_dealer_id
AND a.month = t.dealer_payment_for_month
AND a.year = t.dealer_payment_for_year)
ORDER BY id DESC
LIMIT 3";
$rs_chk_active_ads = $db -> Execute($qry_chk_active_ads);
更新: 当我这样做时:var_dump($rs_temp_table); 我从 PHP 得到以下输出:
object(ADORecordSet_empty)#6 (6) { ["dataProvider"]=> string(5) "empty" ["databaseType"]=> bool(false) ["EOF"]=> bool(true) [ "_numOfRows"]=> int(0) ["fields"]=> bool(false) ["connection"]=> bool(false) }
也许这可以解释为什么 PHP 中的 temp_table 似乎是空的?
【问题讨论】:
-
临时表会持续到连接关闭。如果您或您的数据库类在每次查询后关闭连接,您的临时表将丢失。
-
@Hobo Sapiens,我没有关闭连接,数据库类也绝对没有这样做。如果你说的是正确的,为什么第二个查询在 PHP 中是空的,但在 phpMyAdmin 中执行成功?
-
如果您可以在 PHPMyAdmin 中成功运行这些查询,那么您应该可以在您自己的 PHP 代码中运行它们。如果你不能,这表明你的 PHP 有问题,但你还没有发布,所以我们无法帮助你。
-
嗯,PHP 中的代码几乎就是这两个查询。我在他们之后做的是:var_dump($rs_chk_active_ads->fields['active_ads']);`它是NULL,而在phpMYAdmin中,值是存在的。
-
同时执行查询是否有效?所以: $db->Execute($sql_temp_table . ';' . $qry_chk_active_ads);
标签: php mysql select temp-tables