首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在一个查询中获取带有ads图像的所有ads数据

在一个查询中获取带有ads图像的所有ads数据
EN

Stack Overflow用户
提问于 2022-02-18 10:46:03
回答 3查看 41关注 0票数 0

第一个表名my_ads和条目

代码语言:javascript
复制
+----+-------------+--------+----------+---------+
| 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

代码语言:javascript
复制
+----+-----------+---------------------------------+
| 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 |
+----+-----------+---------------------------------+

我已经编写了查询,并将其组合成一个数组值,但我希望用一个查询来完成它。

代码语言:javascript
复制
$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();

然后在子索引的一个数组中使用两个表值进行编译。

代码语言:javascript
复制
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:

代码语言:javascript
复制
[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

    )
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-02-18 11:14:04

在查询结果中,不能以数组格式接受响应,但可以用逗号分隔该响应。试试下面的代码

代码语言:javascript
复制
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

使用逗号,您将得到数组。

票数 1
EN

Stack Overflow用户

发布于 2022-02-18 10:57:24

您需要添加一个连接(基本解释https://www.w3schools.com/sql/sql_join.asp)到

代码语言:javascript
复制
$my_ads_images = DB::table('ads_images')->select('id','my_ads_id', 'image_path')- 
>groupBy('my_ads_id')->get();

就像这样:

代码语言:javascript
复制
$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();

语法可能略有不同,因为您没有指定用于构建查询的确切内容,但这会让您大致了解要做什么

票数 0
EN

Stack Overflow用户

发布于 2022-02-18 13:42:47

我将@Shaniawan的MySQL查询转换为laravel语法,并将左联接放在查询中,该查询返回my_ads的所有条目,只有具有图像的ads_images。

代码语言:javascript
复制
$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);

希望这能对将来的人有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71172163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档