如何对一个SQL请求中的一个属性进行两次处理?

时间:2018-03-18 作者:Peter

我创建了一个只有一个属性的短代码,但是SQL请求需要两个属性%s, 因为子查询。以下SQL不起作用,因为第二个%s 没有值。

当我使用第二个属性创建变通方法时%s 在SQL中,子查询按预期工作,但我不想使用两个相同的属性。

如何复制单个属性以在SQL请求中使用两次?

 <?php
 // Shortcode: [my_shortcode market="USA"]
 function showSomething( $country ){
    $country = shortcode_atts( array(
        \'market\' => \'\',
        ), $country);  

     global $wpdb;

     $sql = $wpdb->get_results( $wpdb->prepare( 
        "SELECT `Date`, `Field1`, `Field2`, `Field3`
         FROM   `table` 
         WHERE  `country` = %s
         AND    `Date` = (SELECT DISTINCT `Date`
                          FROM `table` 
                          WHERE `country` = %s
                          ORDER BY `Date` DESC
                          LIMIT 1)", $country ) );

   ....
   return ....
 }
 add_shortcode(\'my_shortcode\', \'showSomething\');

1 个回复
最合适的回答,由SO网友:Peter 整理而成

Wordpress 4.8.2特别限制了数字占位符的方便使用,如%1$s, %1$d, %1%f 在里面WPDB::prepare. (core.trac.wordpress.org/ticket/41925).

为了避免使用带编号的占位符,必须重新安排SQL查询,使其仅使用一个占位符%s.

SELECT DISTINCT t.`Date`, y.*
FROM `table` t
LEFT JOIN  `table` y ON (t.`Date` = y.`Date`) 
WHERE t.`country` = %s
ORDER BY t.`Date` DESC
LIMIT 1

结束

相关推荐

获取URL的数据时出现SQL语法错误

我有以下SQL脚本:$query = $wpdb->prepare( \"SELECT user_login FROM wpdb->staff as staff join wpdb->users as users on staff.wp_user_id = users.ID where full_name =%s\", $usernametest ); $userlogin = $wpdb->