如何从2个表中获取一些行

时间:2015-02-26 11:33:11

标签: php mysql laravel join

我有2个表,我需要从表2中获取与表1具有相同键的所有行。

以下是一个例子:

Table1                    Table2
ID  |   Name             ID |  Brand   |  tabel1_id
1   |   Razvan           1  |  Ford    |  1
2   |   Becker           2  |  VW      |  1
                         3  |  Renault |  1
                         4  |  Dacia   |  2

结果需要是一个数组:

array(
"Razvan"=> 
          array('Ford','VW','Renault'),
"Becker"=>
         array('Dacia'));

我使用了正确的JOIN但没有工作;

  $resursa=DB::table('table1')
        ->rightJoin('table2', 'table1.d', '=', 'table2.table1_id')
        ->select('table1.*','table2.*')
        ->groupBy('table1.d')
        ->get();
    return view('home',array('resurse'=>$resursa));

非常感谢!!!

4 个答案:

答案 0 :(得分:0)

我无法评论,所以我必须写一个答案:

您的查询中存在拼写错误:

 ->rightJoin('table2', 'table1.d', '=', 'table2.table1_id')

应该是

 ->rightJoin('table2', 'table1.id', '=', 'table2.table1_id')

如果“查询”构建器中有rightJoin函数,那么这是正确的。但是你需要使用leftJoin,有些像这样:

 $resursa=DB::table('table2')
    ->leftJoin('table1', 'table2.table1_id', '=', 'table1.id')
    ->select('table1.*','table2.*')
    //->groupBy('table1.id') // you can't groupby to get the result you wish for
    ->get();
return view('home',array('resurse'=>$resursa));

答案 1 :(得分:-1)

如果我正确理解了您的问题,正确的查询就是这样的:

SELECT * FROM Table1
LEFT JOIN Table2 ON Table1.ID=Table2.tabel1_id

要获得你问的阵列,我会做类似

的事情
while ( $row=mysql_fetch_assoc(...))
{
    $array[$row['Name']]=$row['Brand']
}

答案 2 :(得分:-1)

SQL:

Select t1.Name as colName , t2.Brand as colBrand FROM Table2 t2 INNER JOIN Table1 t1 on t2.table1_id = t1.ID;

PHP 假设你将获得一个Associated Row。

$output_array = array();
while($row = mysql_fetch_assoc($result))
{
   if(!isset($output_array[$row['colName']]))
   {
       $output_array[$row['colName']] = array();
   }
   $output_array[$row['colName']][] = $row['colBrand'];
}

答案 3 :(得分:-1)

从table2选择GROUP_CONCAT(DISTINCT B.Brand)为B,table1为A,其中A.id = B.table1_id group by B.table1_id。

你将得到2行并获取并使用explode你将获得数组