2013-10-29 20 views
0
我解释

好吗最好的办法是提供一个示例试图组了一个SQL多表查询的结果

Table 1 
ID | name  | class 
------------------------- 
1 | first name | a 
2 | second name | b 

Table 2 
ID | name_id | meta_key | meta_value    | 
------------------------------------------------------- 
1 | 1  | image  | someImage.jpg   | 
2 | 1  | description | very long description | 
3 | 2  | image  | someImage_2.jpg   | 
4 | 2  | description | very long description 2 | 

我试图从表1中选择名称和类,以及所有记录从表2可以看出与ID(表1)相同的name_id

下面是该查询我现在有:

SELECT 
    table1.name, 
    table1.class, 
    table2.name_id, 
    table2.meta_key, 
    table2.meta_value      
FROM 
    table1 
LEFT JOIN 
    table2 ON (table1.ID = table2.name_id)   
WHERE 
    table1.ID = '2' 

这工作,并返回与尽可能多元素的数组的表已经名_ID = 2

2项有没有办法返回一个数组1中第一个表的结果,另一个数组中第二个表的结果?

更新: 理想的结果将是: $导致[ '表1'] [0] =阵列( '姓名'=> '第二名', '类'=> 'B')

$result['table2'][0] = array('name_id' => 2, 
          'meta_key' => 'image', 
          'meta_value' => 'someImage_2.jpg') 
$result['table2'][1] = array('name_id' => 2, 
          'meta_key' => 'description', 
          'meta_value' => 'very long description 2') 

希望是有道理的。

+0

那么,这只是一个SQL语句。如果你想'数组',那么你正在寻找PHP代码。我敢打赌,这将是更好的拆分数组,而不是创建2个单独的查询 –

+0

我问的是如果有一种SQL方式或将返回一个数组,具有我所需要的查询。我知道我可以把目前的结果,并作出一个新的阵列,将符合我在找什么。 –

+0

你试图得到什么输出?你可以制作一个模型吗? – Mazzy

回答

0

我的结果数组拆分后从数据库中获取它...

//Assuming your result-set is assigned to $result: 

$table1_keys = array('id', 'name', 'class'); 
$table2_keys = array('id', 'name_id', 'meta_key', 'meta_value'); 

$table1_results = array(); 
$table2_results = array(); 

foreach($result as $key => $val) { 
    if(in_array($key, $table1_keys)) { 
     $table1_results[] = $val; 
    } 

    if(in_array($key, $table2_keys)) { 
     $table2_results[] = $val; 
    } 
} 

在此之后,你的结果集应分成两个数组:$table1_results$table2_results

希望这可以帮助你。

0

我不认为有一种方法可以在SQL中完成,但我会为每张表添加标签,以便它可以在PHP中完成。

SELECT 
    ':table1', 
    table1.name, 
    table1.class, 
    ':table2', 
    table2.name_id, 
    table2.meta_key, 
    table2.meta_value 
FROM ... 

虽然个人我只是这样做。

SELECT 'table1', table1.*, ':table2', table2.* 
FROM ... 

这样可以更轻松地在客户端和服务器之间复制整行,并在决定添加新字段时减少维护。

但是在您的查询中,您为每个返回的行复制table1,所以这可能会更好。

SELECT 
    table1.*, 
    table2a.meta_value AS image, 
    table2b.meta_value AS description 
FROM 
    table1 
LEFT JOIN 
    table2 AS table2a ON (table1.ID = table2a.name_id AND table2a.meta_key = 'image') 
LEFT JOIN 
    table2 AS table2b ON (table1.ID = table2b.name_id AND table2b.meta_key = 'description') 
WHERE 
    table1.ID = '2'