首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为wp_rest_api连接两个MySQL表

如何为wp_rest_api连接两个MySQL表
EN

Stack Overflow用户
提问于 2020-05-23 20:01:27
回答 1查看 34关注 0票数 0

在我的WordPress数据库中,我有三个表wp_companies和wp_product_types,前者存储一些公司信息,后者存储一系列公司可以自己分配的产品类型,然后我有wp_company_products,它用于使用is将产品类型分配给公司。

下面是一个数据库外观的示例:

wp_companies

代码语言:javascript
复制
id | company_name | member_type | logo
-----------------------------------------------------------------
1  | Google       | full        | https://via.placeholder.com/150
-----------------------------------------------------------------
2  | Crunchyroll  | full        | https://via.placeholder.com/150

wp_products

代码语言:javascript
复制
id | product_name    |
----------------------
1  | Car Insurance   |
----------------------
2  | House Insurance |
----------------------
3  | Life Insurance  |

wp_company_products

代码语言:javascript
复制
id | company_id | product_id 
----------------------------
1  | 1          | 2
----------------------------
2  | 2          | 1
----------------------------
3  | 1          | 3

下面是简单地以wp_companies格式显示数据的当前MySQL查询

代码语言:javascript
复制
    add_action('rest_api_init', function() {
        register_rest_route('custom-routes/v1', 'members', array(
            'methods' => 'GET',
            'callback' => 'get_members'
        ) );
    });

    function get_members($data) {
        global $wpdb;

        $query = $wpdb->get_results( "SELECT company_name, member_type, logo, site_url FROM {$wpdb->prefix}companies ORDER BY RAND()" );

        foreach ( $query as $member ) {
            $member_data[] = array(
                "company_name" => $member->company_name,
                "member_type" => $member->member_type,
                "logo" => $member->logo,
            );
        }

        return $member_data;
    }

这在我的api端点上像这样显示我的数据:

代码语言:javascript
复制
[
    {
        "company_name":"Google",
        "member_type":"full",
        "logo":"https://via.placeholder.com/150",
    },
    {
        "company_name":"Crunchyroll",
        "member_type":"full",
        "logo":"https://via.placeholder.com/150",
    }
]

但我想要的是组合wp_companies和wp_company_products表,这样我的数据就可以在api端点上显示如下:

代码语言:javascript
复制
[
    {
        "company_name":"Google",
        "member_type":"full",
        "logo":"https://via.placeholder.com/150",
        "products": [
            "House Insurance",
            "Life Insurance"
         ]
    },
    {
        "company_name":"Crunchyroll",
        "member_type":"full",
        "logo":"https://via.placeholder.com/150",
        "products": [
            "Car Insurance",
         ]
    }
]

我如何构造我的MySQL查询才能实现这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-23 20:47:17

请试试这个

代码语言:javascript
复制
function get_members($data) {
    global $wpdb;

    $query = $wpdb->get_results( "SELECT company_name, member_type, logo, site_url FROM {$wpdb->prefix}companies ORDER BY RAND()" );

    foreach ( $query as $member ) {
        $productQuery = $wpdb->get_results( "SELECT product_name FROM wp_products WHERE id IN (SELECT product_id from wp_company_products WHERE compony_id = '{$member->id}') " );
        $products = array();
        foreach ( $productQuery as $prduct ) {
            array_push($products ,$prduct->product_name);
        }

        $member_data[] = array(
            "company_name" => $member->company_name,
            "member_type" => $member->member_type,
            "logo" => $member->logo,
            "products" => $products
        );
    }

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

https://stackoverflow.com/questions/61971715

复制
相关文章

相似问题

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