2011-01-29 33 views
1

只是好奇,如果让说我有SQL在这种结构PDO复杂的提取模式

array(
    0 => array(
     'article.id' => '1001', 
     'article.title' => 'lorem ipsum', 
     'article.body' => 'dolor sit', 
     'user.id' => '2012', 
     'user.name' => 'foo', 
     'user.email' => '[email protected]' 
    ), 
    1 => array(
     'article.id' => '1001', 
     'article.title' => 'lorem ipsum', 
     'article.body' => 'dolor sit', 
     'user.id' => '2013', 
     'user.name' => 'bar', 
     'user.email' => '[email protected]' 
    ) 
); 

返回数据正如你可以看到这两个实际上指的是同一篇文章,而是由2个不同的用户共同撰写,不使用任何其他的ORM/DB库,只是普通的PDO,你会怎么做,从数据库返回的数据转换成这种形式:

array(
    0 => array(
     'article.id' => '1001', 
     'article.title' => 'lorem ipsum', 
     'article.body' => 'dolor sit', 
     'user' => array(
      0 => array(
       'user.id' => '2012', 
       'user.name' => 'foo', 
       'user.email' => '[email protected]' 
      ), 
      1 => array(
       'user.id' => '2013', 
       'user.name' => 'bar', 
       'user.email' => '[email protected]' 
      ) 
     ), 
    ) 
); 

而且,其DB库(如果可能的话,没有ORM)可以做到这一点没有很多努力?

回答

1

而不是做一个联接来检索一个查询中的文章和用户数据,为什么不做两个单独的查询,一个检索文章,第二个检索与文章相关的用户数据?这当然更简单,可能更有效。

+0

如果我返回的行数多于2行,并且它有许多由不同作者共同编写的文章,该怎么办?如果我将一个大的查询分成2个,那还会更好吗? – Jeffrey04 2011-01-29 10:11:28

0

在PDO类中使用此方法并不是一个好习惯。 PDO与数据库协同工作,并应返回结构化数据。你可以编写你自己的函数,它会对返回的数组进行操作。