我有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));
非常感谢!!!
答案 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你将获得数组