【问题标题】:mysql - join two tables and group by the first table primary key but having second table rows toomysql - 连接两个表并按第一个表主键分组,但也有第二个表行
【发布时间】:2018-09-15 05:52:36
【问题描述】:

我在 Laravel 中的查询是这样的:

$rows = \DB::table('first_table')
    ->select('*', 'first_table.car_id AS car_id')
    ->leftJoin('second_table', 'first_table.car_id', 'second_table.car_id')
    ->where('first_table.user_id', $user_id)
    ->groupBy('first_table.car_id')
    ->get();

上面的查询结果将是来自first_table 的所有行,second_table 行将减少为 1,因为groupBy

我有一个 foreach 循环,我想遍历 first_table 的每一行但也让 second_table 显示。但是,如果我说->groupBy('first_table.car_id'),它会将second_table 行减少到1,如果我说->groupBy('second_table.offer_id'),它将显示比预期更多的行,那么我应该设置什么查询以将first_table 的每一行显示为liul 列表中,并将前一个li 下的second_table 行显示为每一行的新ul 列表?

编辑

我想要这样的东西:

first_table:
car_id  user_id price
7       1       60000
8       1       85000

second_table:
offer_id    car_id  offer_price
6           7       1000
7           7       5000
8           7       3000

foreach($rows as $row)
{
    <ul>
        <li>$row->price</li>
        <ul>
            foreach($row->offer_prices as $offer_price)
            {
                <li>$row->offer_price</li>
            }
        </ul>
    </ul>
}

【问题讨论】:

  • -&gt;leftJoin('second_table', 'first_table.car_id', '=', 'second_table.car_id') 缺少= 比较器

标签: mysql laravel join


【解决方案1】:

而不是select *

使用

Select tablename1.columname1, tablename2.coloumnname2

试试这个

$rows = Modelname::where('first_table.user_id', $user_id)
    ->select('tablename1.columname1', 'tablename2.coloumnname1', 'first_table.car_id AS car_id')
    ->leftJoin('second_table', 'first_table.car_id','=', 'second_table.car_id')
    ->groupBy('first_table.car_id')
    ->get();

写第一个表的模型名称

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-23
    • 1970-01-01
    • 2013-01-25
    • 1970-01-01
    • 1970-01-01
    • 2015-11-12
    • 1970-01-01
    • 2012-08-23
    相关资源
    最近更新 更多