我想从users
和usermeta
表中选择列。
这是我的查询
$sql = $wpdb->prepare(
"SELECT {$wpdb->users}.ID FROM {$wpdb->users}
WHERE {$wpdb->users}.user_registered <= '%s'
AND {$wpdb->usermeta}.meta_key='custom_status'
AND {$wpdb->usermeta}.meta_value=0
INNER JOIN {$wpdb->usermeta} ON {$wpdb->users}.ID= {$wpdb->usermeta}.user_id", $before);
,但不会选择任何内容。我知道我有一个用户meta_value
和user_registered
少于当前日期时间($before
)。
$before
就是这样:2019-07-06 19:03:55
答案 0 :(得分:1)
问题在于您将%s
占位符用单引号引起来。这不是必需的,因为WordPress将用包含您传递给%s
方法的值的正确字符串替换prepare()
的所有实例。
因此,考虑到这一点,您的代码将变为:
$sql = $wpdb->prepare(
"SELECT {$wpdb->users}.ID FROM {$wpdb->users}
WHERE {$wpdb->users}.user_registered <= %s
AND {$wpdb->usermeta}.meta_key='custom_status'
AND {$wpdb->usermeta}.meta_value=0
INNER JOIN {$wpdb->usermeta} ON {$wpdb->users}.ID= {$wpdb->usermeta}.user_id", $before);
此外,查询的INNER JOIN ...
部分必须放在WHERE
子句之前,否则MySQL会抛出无效的语法错误:
$sql = $wpdb->prepare(
"SELECT {$wpdb->users}.ID FROM {$wpdb->users}
INNER JOIN {$wpdb->usermeta} ON {$wpdb->users}.ID= {$wpdb->usermeta}.user_id
WHERE {$wpdb->users}.user_registered <= %s
AND {$wpdb->usermeta}.meta_key='custom_status'
AND {$wpdb->usermeta}.meta_value=0", $before);