1

首先对不起我糟糕的英语......但我有一些问题需要一些建议

如何在一个查询中从数据库中获取数据?是否可以从数据库中获取数组,在主数组中获取另一个数组?

表结构:

user_post - 
    id int(12) AI unique
    uid int(12)
    content text

user_image - 
    filename varchar255
    uid int(12)
    pid int(12) index
    pid->foreign_key user_post.id 
    ON DELETE CASCADE
    ON UPDATE CASCADE

示例:对于每个 user_post 可以包含超过 1 行 user_image 但最多 10 行,我如何选择并将其全部放在 1 个数组中,这样我就不需要像下面那样运行查询 2 次?

查询 2 次以完成此示例:

$db = new Db('main');
$db->query('SELECT `id`, `uid`, `content` FROM `user_post` WHERE `id` = :id LIMIT 1');
$db->bind(':id', '1'); //Example
$result = $db->single();

$db->query('SELECT `filename`, `uid`, `pid` FROM `user_image` WHERE `pid` = :pid LIMIT 10');
$db->bind(':pid', $result['id']);
$images = $db->resultset();

所以 $images 将包含帖子的所有图像文件名,无论如何要在 1 个查询中进行?

4

2 回答 2

1

您可以通过JOINing 两个表在一个查询中执行此操作:

SELECT p.id, p.uid, p.content,
  i.filename, i.uid, i.pid
FROM user_post AS p
INNER JOIN user_image AS i ON i.pid = p.id
WHERE p.id = :id
LIMIT 10;
于 2013-09-01T07:40:13.500 回答
0

简单地说,使用内部连接。我已经有一段时间没有接触过 MySQL,而且使用 PHP 的时间更长,但我会尽力提供帮助:

SELECT `user_post`.*, `user_image`.* FROM `user_post` INNER JOIN ON `user_image`.`pid` = `user_post`.`id` WHERE `user_post`.`id` = :id

您需要为此设置一个外键。

于 2013-09-01T07:40:53.847 回答