我需要从另一个表中获取带有帖子图像的多个帖子,每个帖子都有不同的图像。像post1有10张图片,post2有5张图片
我的两个表格是image
和post
表post
结构
|title |desc |date |postid|...
|title1|desc1|date1| 1 |...
|title2|desc2|date2| 2 |
.
.
.
表image
结构
|hash |hits |timestamp |userid |postid|...
|hash1 |hits1|timestamp1|userid1| 1 |...
|hash2 |hits2|timestamp2|userid1| 3 |...
|hash3 |hits3|timestamp3|userid1| 2 |...
|hash4 |hits4|timestamp4|userid1| 1 |...
.
.
.
我需要使用图片获取帖子,postid
是获取帖子图片的关键。
我这样做,但它没有给我正确的结果。
SELECT `title`,`desc`,`date` FROM `img`.`post` AS a
INNER JOIN
(SELECT `hash`,`hits`,`timestamp`,`userid`,`postid` FROM `img`.`image` WHERE `postid` IS NOT NULL)
AS b
WHERE a.`postid` IS NOT NULL
我的结果是
mysqli_stmt_bind_result($prepare, $title,$desc,$date);
不适用于
mysqli_stmt_bind_result($prepare, $title,$desc,$date,$hash,$hits,$timestamp,$userid,$postid);
这会产生错误,因为没有绑定变量不匹配。
我需要获取
的帖子图像数组$hash,$hits,$timestamp,$userid,$postid
请参阅并建议一种方法。
答案 0 :(得分:1)
您需要在主查询的SELECT子句中包含子查询中的所有列,因为它定义了主查询返回的内容。此外,不需要子查询,您只需执行普通的JOIN
并将WHERE
放在主查询中。
您还缺少指定加入两个表的条件的ON
子句。
SELECT a.title, a.desc, a.date, b.hash, b.hits, b.timestamp, b.userid, b.postid
FROM post AS a
INNER JOIN image AS b ON a.postID = b.postID
您可以将图像信息放入PHP代码中的数组中:
$post_data = array();
while ($prepare->fetch()) {
if (!isset($post_data[$postid])) {
$post_data[$postid] = array('title' => $title, 'desc' => $desc, 'date' => $date, 'images' => array());
}
$post_data[$postid]['images'][] = array('hash' => $hash, 'hits' => $hits, 'timestamp' => $timestamp, 'userid' => $userid);
}
您还可以使用GROUP_CONCAT
在一行中获取所有图像信息。
SELECT a.title, a.desc, a.date, a.postid,
GROUP_CONCAT(b.hash ORDER BY b.timestamp) AS hash,
GROUP_CONCAT(b.hits ORDER BY b.timestamp) AS hits,
GROUP_CONCAT(b.timestamp ORDER BY b.timestamp) AS timestamp,
GROUP_CONCAT(b.userid ORDER BY b.timestamp) AS userid
FROM post AS a
INNER JOIN image AS b ON a.postID = b.postID
GROUP BY a.postID
在结果中,$hash
,$hits
,$timestamp
和$userid
将是以逗号分隔的列表,您可以在PHP中使用explode()
将它们分成数组。
答案 1 :(得分:1)
尝试以下代码,
SELECT a.title, a.desc, a.date, b.hash, b.hits, b.timestamp, b.userid, b.postid
FROM post AS a
INNER JOIN image AS b ON a.postID = b.postID GROUP BY a.postid