如何为 wp_rest_api 连接两个 MySQL 表

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


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


wp_公司


id | company_name | member_type | logo

-----------------------------------------------------------------

1  | Google       | full        | https://via.placeholder.com/150

-----------------------------------------------------------------

2  | Crunchyroll  | full        | https://via.placeholder.com/150

wp_产品


id | product_name    |

----------------------

1  | Car Insurance   |

----------------------

2  | House Insurance |

----------------------

3  | Life Insurance  |

wp_company_products


id | company_id | product_id 

----------------------------

1  | 1          | 2

----------------------------

2  | 2          | 1

----------------------------

3  | 1          | 3

这是我当前的 MySQL 查询,它只显示 wp_companies 中的数据


    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 端点上显示我的数据:


[

    {

        "company_name":"Google",

        "member_type":"full",

        "logo":"https://via.placeholder.com/150",

    },

    {

        "company_name":"Crunchyroll",

        "member_type":"full",

        "logo":"https://via.placeholder.com/150",

    }

]

我如何构建我的 MySQL 查询才能实现这一目标?


蛊毒传说
浏览 76回答 1
1回答

呼如林

请试试这个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;}
打开App,查看更多内容
随时随地看视频慕课网APP