mysql查询数组里面的数组

时间:2013-09-01 07:36:15

标签: php mysql pdo

抱歉,首先是我糟糕的英语...但我有一些问题需要一些建议

如何在一个查询中从数据库中获取数据?是否可以从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个查询中进行?

2 个答案:

答案 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

您需要为此设置外键。