我从一个很长的查询中得到了一个奇怪的结果,我将在这里简化:
DROP TEMPORARY TABLE IF EXISTS table1;
CREATE TEMPORARY TABLE table1 AS
(SELECT
parent.id as parent_id,
times.a_time,
times.sequence,
FROM times
LEFT JOIN parent ON times.parent_id=parent.id
WHERE times.stop_id=10);
DROP TEMPORARY TABLE IF EXISTS table2;
CREATE TEMPORARY TABLE table2 AS
(SELECT
parent.id as parent_id,
times.b_time,
times.sequence,
FROM times
LEFT JOIN parent ON times.parent_id=parent.id
WHERE times.stop_id=15 );
--here comes PDO->exec();
SELECT table1.*, table2.b_time
FROM table1
LEFT JOIN table2 ON table1.parent_id=table2.parent_id
WHERE table2.parent_id IS NOT NULL AND table1.sequence<table2.sequence
ORDER BY table1.a_time
我正在使用 EMS MySQL Manager 2007 测试查询,而在 PHP 中我正在使用 PDO 查询。
为了获得最终结果,(我知道 PDO 不支持一次运行此完整查询并返回结果集),我PDO->exec()
在创建临时表后运行(请参阅查询中的注释),然后继续PDO->query()
运行最后一个SELECT
:
$db = new PDO("mysql:host=".DB_HOST.";dbname=".DB_NAME, DB_USER, DB_PASS);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
$tempTablesSQL='DROP TEMPORARY TABLE IF EXISTS...'; //create temporary tables
$db->exec($tempTablesSQL);
$sql='SELECT table1.*, table2.b_time ...'; //JOIN and SELECT the results
$results=array();
foreach($db->query($sql) as $row){
$results[]=$row;
}
print_r($results);
在 MySQL Manager 中,我一次运行整个查询,对于那些特定的 ID,我得到 29 行作为结果(这是正确的,因为记录是从以前解析的文件中插入的,并且通过将结果与我知道的文件进行比较他们很好)。
但在 PHP 中,我只得到 25 个结果,而且b_time
.
所以,我的问题是:
为什么我会得到错误的结果?
我调用此查询的方法是否错误(在 PHP 中)?
任何帮助表示赞赏。
--编辑--
这不仅仅是 PDO,我尝试使用 mysqli_multi_query,我得到了同样的错误结果。
我注意到的一件重要的事情是:如果我使用常规表而不是临时表,结果很好。