gpt4 book ai didi

php - mysql - 在子查询中获取多行

转载 作者:行者123 更新时间:2023-11-29 02:20:26 26 4
gpt4 key购买 nike

我需要从另一个表中获取多个带有帖子图片的帖子,每个帖子都有不同的图片数量。比如 post1 有 10 张图片,post2 有 5 张图片

我的两个表是imagepost

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); 

这会产生错误,因为没有绑定(bind)变量不匹配。

我需要获取帖子图像数组

$hash,$hits,$timestamp,$userid,$postid

请查看并建议一种方法。

最佳答案

您需要在主查询的 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() 将它们拆分为数组。

关于php - mysql - 在子查询中获取多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32795320/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com