2012-04-12 69 views
0

MySQL数据库MySQL来1个阵列

产品

id  name    
1   Product #1    
2   Product #2     
3   Product #3    
4   Product #4 

评论

id  idUser idProduct Rating 
1   1   1   A Long Boring Review that is up to 500 characters 
2   1   2   A Long Boring Review that is up to 500 characters 
3   2   4   A Long Boring Review that is up to 500 characters 
4   1   1   A Long Boring Review that is up to 500 characters 

什么是从这两个数据库拉动信息,并安排它们的方式的最佳途径:

[0] => stdClass Object 
     (
      [id] => 1 
      [name] => Product #1 
      [reviews] => Array(
       [0]=> 
        (
         [id] => "1" 
         [idUser] => "1" 
         [idProduct] => "1" 
         [Rating] => "A Long Boring Review that is up to 500 characters" 
        ) 
       [1] = > 
        (... 
      ) 
     ) 
[1] => stdClass Object 
     (
      [id] => 2 
      [name] => Product #2 
      [reviews] => Array(
       [0]=> 
        (
         [id] => "1" 
         [idUser] => "1" 
         [idProduct] => "2" 
         [Rating] => "A Long Boring Review that is up to 500 characters" 
        ) 
       [1] = > 
        (... 
      ) 
     ) 

我在考虑使用GROUP_CONCAT,但不会在以后造成很多性能问题?也没有一个字符限制?

回答

0

你不能没有第一迭代所需的数据超过产品的结果,因为它是一个一对多的关系

看到这个答案Displaying data from two tables with many-to-many relation using PHP/CodeIgniter

这是笨,但你可以得到的想法

+0

是不是很不好,虽然运行在一个循环的查询? – Jarritos 2012-04-12 04:40:40

+0

根据您的要求,没有其他选择。在一个查询中不可能,因为产品中的每一行都有很多行 – Broncha 2012-04-12 05:05:35

+0

如果我采用了不同的格式,那么可以在没有循环的情况下做到这一点? – Jarritos 2012-04-12 09:55:39

0

这会给你一个一分维的结果,如果只有一个观点:

SELECT `id`,`name`,(SELECT `Review`.`Rating` FROM `Review` WHERE `Review`.`idProduct` = `id`) as `rating` FROM `Product` WHERE 1; 

对于多评论您需要循环并为每个产品构建结构。

对于另一种方法,一看便知这个问题:How to create relationships in MySQL

+0

对于其他方法,我不是已经通过idProduct做到了这一点吗?这是外键。也有多个评分结果。在我看来,循环这将是一件坏事。 – Jarritos 2012-04-12 09:54:51

+0

对不起,我以为你可能会使用MyISAM,只是制作你自己的外键,而不是利用InnoDB内置外键支持的能力。 – 2012-04-12 15:44:54