如何在一个查询中从数据库中获取数据?是否可以从db获取数组,在主数组内部获得另一个数组?
表格结构:
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个查询中进行?
答案 0 :(得分:1)
您只能通过JOIN
两个表格在一个查询中执行此操作:
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;
答案 1 :(得分: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
您需要为此设置外键。