2015-02-26 6 views
0

У меня есть 2 таблицы, и мне нужно получить все строки из таблицы № 2 с одним и тем же ключом с таблицей №1.Как получить несколько строк из 2 таблиц

Вот пример:

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')); 

Я использовал право РЕГИСТРИРУЙТЕСЬ но не работает;

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

Большое спасибо !!!

+2

Что вы сделали до сих пор? Где ваш код? – lmarcelocc

+1

Пожалуйста, покажите запрос, который вы попробовали, и это «не работает». Объясните, что вы подразумеваете под «нерабочим». –

+0

Что это значит, что он не работает? Какая ошибка? –

ответ

-1

Если я правильно понял ваш вопрос, правильный запрос что-то вроде этого:

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

Чтобы получить массив, который вы просили, я бы сделал что-то вроде

while ($row=mysql_fetch_assoc(...)) 
{ 
    $array[$row['Name']]=$row['Brand'] 
} 
-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 Предполагая, что вы получите ассоциированную строку.

$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']; 
} 
0

Я не могу комментировать, так что я должен написать ответ:

есть опечатка в запросе:

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

должен быть

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

Это было бы правильным, если бы была функция rightJoin в построителе запросов. Но вы должны использовать LeftJoin вместо somethign так:

$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

выберите GROUP_CONCAT (DISTINCT B.Brand) от table2 как B, table1 как А где A.id = B.table1_id группы по B.table1_id.

вы получите 2 строки и выбор и используйте взрыв, вы получите массив

Смежные вопросы