在 PHP 中创建 MySQL 临时 table 和 select
Create MySQL temporary table and select from it within PHP
我需要关于我正在编写的 PHP/MySQL 代码的建议。我需要做的是创建一个临时 table,然后从中创建 select。问题是临时 table 仅在创建它的查询期间持续存在,因此 PHP 中的第二个查询为空。
这是两个查询,我假设解决方案是将它们合并到一个查询中,但到目前为止我累了都没有用。
下面的查询如果一个接一个地执行,在 phpMyAdmin 中有效。
临时table查询:
$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"]=> 布尔值(真)[“_numOfRows”]=> 整数值(0)["fields"]=> 布尔值(假)["connection"]=> 布尔值(假) }
也许这就是为什么 temp_table 在 PHP 中似乎是空的?
为什么不简单地使用...
SELECT a.*
, t.user_dealer_id
, t.dealer_payment_for_month
, t.dealer_payment_for_year
FROM
( SELECT SUM(number_active_ads) active_ads
, DATE_FORMAT(create_date,'%Y-%m') yearmonth
, dealer_id
FROM tbl_active_ads
WHERE dealer_id = '".$rs->fields['id']."'
GROUP
BY DATE_FORMAT(create_date,'%Y-%m')
) a
LEFT
JOIN tbl_transaction t
ON a.dealer_id = t.user_dealer_id
AND a.yearmonth = MONTH(t.dealer_payment_for_month)
AND a.yearmonth = YEAR(t.dealer_payment_for_year)
ORDER
BY id DESC
LIMIT 3;
我需要关于我正在编写的 PHP/MySQL 代码的建议。我需要做的是创建一个临时 table,然后从中创建 select。问题是临时 table 仅在创建它的查询期间持续存在,因此 PHP 中的第二个查询为空。
这是两个查询,我假设解决方案是将它们合并到一个查询中,但到目前为止我累了都没有用。
下面的查询如果一个接一个地执行,在 phpMyAdmin 中有效。
临时table查询:
$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"]=> 布尔值(真)[“_numOfRows”]=> 整数值(0)["fields"]=> 布尔值(假)["connection"]=> 布尔值(假) }
也许这就是为什么 temp_table 在 PHP 中似乎是空的?
为什么不简单地使用...
SELECT a.*
, t.user_dealer_id
, t.dealer_payment_for_month
, t.dealer_payment_for_year
FROM
( SELECT SUM(number_active_ads) active_ads
, DATE_FORMAT(create_date,'%Y-%m') yearmonth
, dealer_id
FROM tbl_active_ads
WHERE dealer_id = '".$rs->fields['id']."'
GROUP
BY DATE_FORMAT(create_date,'%Y-%m')
) a
LEFT
JOIN tbl_transaction t
ON a.dealer_id = t.user_dealer_id
AND a.yearmonth = MONTH(t.dealer_payment_for_month)
AND a.yearmonth = YEAR(t.dealer_payment_for_year)
ORDER
BY id DESC
LIMIT 3;