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();
我有下面的 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();