第一个表名my_ads和条目
+----+-------------+--------+----------+---------+
| id | title | gender | country | user_id |
+----+-------------+--------+----------+---------+
| 35 | NOman Javed | male | Pakistan | 1 |
| 34 | Noman Javed | male | Pakistan | 1 |
| 33 | Noman Javed | male | Pakistan | 1 |
| 32 | Noman Javed | male | Pakistan | 1 |
| 31 | Noman Javed | male | Pakistan | 1 |
+----+-------------+--------+----------+---------+第二表ads_images
+----+-----------+---------------------------------+
| id | my_ads_id | image_path |
+----+-----------+---------------------------------+
| 28 | 35 | 1645180564-Screenshot-(529).png |
| 27 | 35 | 1645180562-Screenshot-(528).png |
| 26 | 35 | 1645180558-Screenshot-(527).png |
| 25 | 34 | 1645180318-Screenshot-(529).png |
| 24 | 34 | 1645180316-Screenshot-(528).png |
+----+-----------+---------------------------------+我已经编写了查询,并将其组合成一个数组值,但我希望用一个查询来完成它。
$all_ads = DB::table('my_ads')->get();
$my_ads_images = DB::table('ads_images')->select('id','my_ads_id', 'image_path')-
>groupBy('my_ads_id')->get();然后在子索引的一个数组中使用两个表值进行编译。
foreach($all_ads as $ads_key => $ads) {
$my_ads_array[$ads_key]['id'] = $ads->id;
$my_ads_array[$ads_key]['title'] = $ads->title;
foreach($my_ads_images as $my_ads_image) {
if($ads->id == $my_ads_image->my_ads_id) {
$my_ads_array[$ads_key]['image_path'] = $my_ads_image->image_path;
}
}
}我可以用一个查询写查询来实现$my_ads_array[$ads_key]['image_path'] = array of images here。我正在使用Laravel 8 with MySQL。
我知道这是一个基本的查询,但我不知道它将如何工作。我试过加入,但这对我没有用,不知道为什么。
Looking for output like this:
[0] => Array
(
[id] => 35
[title] => Noman Javed
[gender] => male
[description] => Height: 5.6''
[country] => Pakistan
[image_path] => Array
(
[0] => 1645180558-Screenshot-(527).png
[1] => 1645180562-Screenshot-(528).png
[2] => 1645180564-Screenshot-(529).png
)
[created_at] => 2022-02-18 10:35:49
)发布于 2022-02-18 11:14:04
在查询结果中,不能以数组格式接受响应,但可以用逗号分隔该响应。试试下面的代码
SELECT m.*, GROUP_CONCAT(a.image_path SEPARATOR ', ') FROM my_ads m inner join ads_images a on m.id=a.my_ads_id group by m.id;当你得到回应,然后在上面放一个循环,然后引爆这个
a.image_path
使用逗号,您将得到数组。
发布于 2022-02-18 10:57:24
您需要添加一个连接(基本解释https://www.w3schools.com/sql/sql_join.asp)到
$my_ads_images = DB::table('ads_images')->select('id','my_ads_id', 'image_path')-
>groupBy('my_ads_id')->get();就像这样:
$my_ads_images = DB::table('ads_images')->join('my_ads', 'my_ads.id', '=', 'ads_images.my_ads_id')->select('id','my_ads_id', 'image_path')->groupBy('my_ads_id')->get();语法可能略有不同,因为您没有指定用于构建查询的确切内容,但这会让您大致了解要做什么
发布于 2022-02-18 13:42:47
我将@Shaniawan的MySQL查询转换为laravel语法,并将左联接放在查询中,该查询返回my_ads的所有条目,只有具有图像的ads_images。
$my_ads_and_images = DB::table('my_ads')
->leftJoin('ads_images', 'my_ads.id', '=', 'ads_images.my_ads_id')
->select('my_ads.*', DB::raw('group_concat(ads_images.image_path) as image_path'))
->groupBy('my_ads.id')
->paginate(12);希望这能对将来的人有所帮助。
https://stackoverflow.com/questions/71172163
复制相似问题