通过post_id从数据库表中获取数据,从第二个数据库表中获取数据

时间:2019-03-27 作者:Bert ter Voert

我有两个db表:wp\\U注释和wp\\U评级。我正在尝试使用$wpdb创建一个查询,它必须执行以下操作:

从…起wp_comments 我必须得到comment_ID\'在那里comment_post_ID 等于当前值post id 获取所有ratings 从…起wp_ratings 哪里comment_id 等于comment_ID\'我从wp_comments.

wp\\U注释表是用于注释的标准wp表。wp\\U评级是自定义的,如下所示:

wp\\U额定值:

我正在努力确定是使用联接还是子查询来实现这一目标。我对写查询很陌生。到目前为止,我只有查询的第一部分:

$my_query = $wpdb -> get_results( "SELECT rating FROM wp_ratings WHERE comment_id =( SELECT comment_ID FROM comments WHERE comment_post_ID = " . the_ID () . " ) " );
我想让评分计算(并显示)平均值,并显示评分数。

编辑:使子字符串部分工作:

$my_query = $wpdb -> get_results( "SELECT comment_ID FROM wp_comments WHERE comment_post_ID =  $post->ID" );
找到了一条注释,当您使用双引号时,可以直接插入变量而无需关闭字符串!

1 个回复
SO网友:MikeNGarrett

为了使这项工作顺利进行,您需要做一些不同的事情。

确保正在设置$wpdb 到全球使用$wpdb->prefix 而不是硬编码wp_.

  • Wrap your variables in curly braces.
  • 使用$wpdb 变量而不是表名,如$wpdb->comments.$wpdb->prepare() 在执行查询之前

    使用$wpdb->prepare()

    来自Codex:

    在执行SQL查询之前,必须对SQL查询中的所有数据进行SQL转义,以防止SQL注入攻击。prepare方法为WordPress执行此功能,它支持类似sprintf()和vsprintf()的语法。

    sprintf 与大多数函数的调用略有不同。就像array_merge(), 你想说多少就说多少。

    首先,指定SQL语句:

    $wpdb->prepare( 
        "SELECT rating 
        FROM {$wpdb->prefix}ratings 
        WHERE comment_id = ( 
            SELECT comment_ID 
            FROM {$wpdb->comments} 
            WHERE comment_post_ID = %d 
        )", get_the_ID() )
    
    请注意%d 在准备声明中?这意味着这里需要一个整数。如果没有从get_the_ID(), 该过程将出错以保护您的数据。

    接下来,按照预期参数在SQL语句中的显示顺序添加这些参数。由于本声明中只有一个,我们添加get_the_ID() 在SQL语句之后。

    把它们放在一起

    global $wpdb;
    $my_query = $wpdb->get_results( 
        $wpdb->prepare( 
            "SELECT rating 
            FROM {$wpdb->prefix}ratings 
            WHERE comment_id = ( 
                SELECT comment_ID 
                FROM {$wpdb->comments} 
                WHERE comment_post_ID = %d 
            )", 
        get_the_ID() ) 
    );
    

    相关推荐

    AJAX$wpdb不返回表数据

    我正在使用WordPress 5.0.2带WooCommerce 3.5.3 我在checkoutpage上有两个选择下拉字段。我想从billing\\u region下拉列表中检索所选region\\u代码值,然后根据该值填充billing\\u province select下拉列表,但ajax请求不返回任何内容(400)吼叫我的代码HTML : <div class=\"delivery-form-row\"> <label for=\"billing_region\