PHP/PDO - 从循环中的两个表中获取数据

PHP/PDO - Fetching data from two tables in loop

我有下面的 PDO 准备语句,其中我 select 来自两个表和两个不同数据库的数据。

$stmt = $dbh->prepare("SELECT DISTINCT 
                t1.id, t1.title, t1.text, t1.time, t1.userid, t1.type, 
                t2.id, t2.text, t2.time, t2.timeline_id, t2.type, t2.url
                        FROM database1.growl t1
                INNER JOIN database2.notifications t2 on t1.userid = t2.timeline_id
                        WHERE t1.userid = :userid AND t2.timeline_id = :userid 
                        ORDER BY t1.time DESC, t2.time DESC"); 
$stmt->bindParam(':userid', $userdata["id"]);
$stmt->execute();

但是,当我尝试使用以下代码从两个 表访问数据时:

while($data=$stmt->fetch()){    
    echo $data["text"]; 
    echo "<br />";
}

打印出来的都是来自第二个数据库 database2.notifications.

的数据

我的目标是从两个表中获取数据,并根据 unixtimestamp 对数据进行排序。

看看你的SELECT

t1.id, t1.title, t1.text, t1.time, t1.userid, t1.type, 
t2.id, t2.text, t2.time, t2.timeline_id, t2.type, t2.url

列名相同。由于当数据返回到 PHP 时 table 名称不是标识符的一部分,因此第二个 table 数据会覆盖第一个 table 数据。每当存在名称冲突时,您需要像这样明确命名您的列:

t1.id AS id1, t1.title AS title2, ...
t2.id AS id2, t2.text AS text2, ...

那么您将能够访问 PHP:

中的所有数据
while($data=$stmt->fetch()){    
    echo $data["text1"]; 
    echo $data["text2"]; 
    echo "<br />";
}

经过澄清,这似乎是你要找的:

$sql = <<<SQL
    SELECT title, text, time, type, url
    FROM
    (
        SELECT title, text, time, type, NULL AS url
        FROM database1.growl
        WHERE userid = :uid1
        UNION
        SELECT title, text, time, type, url
        FROM database2.notifications
        WHERE timeline_id = :uid2
    ) subq
    ORDER BY time DESC
SQL;

$stmt = $dbh->prepare($sql); 
$stmt->bindParam(':uid1', $userdata["id"]);
$stmt->bindParam(':uid2', $userdata["id"]);
$stmt->execute();