Присоединяйтесь к пользователям и таблицам usermeta - WordPress - PullRequest
0 голосов
/ 07 июля 2019

Я хочу выбрать столбцы из таблиц 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

1 Ответ

1 голос
/ 08 июля 2019

Проблема в том, что вы помещаете заполнитель %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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...