Избегайте добавления результатов в таблицу, если она уже существует - PullRequest
0 голосов
/ 31 октября 2019

В настоящее время я получаю результаты запроса и добавляю их в новую таблицу. На данный момент он просто добавляет результаты при каждой загрузке.

Как можно избежать добавления результатов, если user_id уже существует в таблице payment_issue?

$results = $wpdb->get_results( "SELECT s.id, s.status FROM subscriptions as s LEFT JOIN subscriptionlog as l ON s.id=l.subscription_id WHERE l.event LIKE 'payment_error_mode_triggered %' AND l.date >= 1514764800 AND l.date <= 1569888000 and s.status = 'payment-issue'" );

foreach($results as $result){
  $customer_id = $result->id;
  $wpdb->insert("payment_issue", array(
   "user_id" => $customer_id,
  ));
}

1 Ответ

1 голос
/ 31 октября 2019

В MySQL вы можете использовать on duplicate key update, чтобы избежать вставки новых пользователей.

Во-первых, вам нужен уникальный индекс или ограничение для payment_issue:

create unique index unq_payment_issue_id on payment_issue(id);

Примечание. В вопросе не указано, какое имя столбца «идентификатор пользователя» содержится в payment_issue, поэтому я просто использую id.

. Затем вставьте фразу как insert . . . select.

В-третьих, вы должны сформулировать это следующим образом:

INSERT INTO payment_issue (id, status)
    SELECT s.id, s.status
    FROM subscriptions s LEFT JOIN
         subscriptionlog l
         ON s.id = l.subscription_id
    WHERE l.event LIKE 'payment_error_mode_triggered %' AND
          l.date >= 1514764800 AND 
          l.date <= 1569888000 and
          s.status = 'payment-issue'
    ON DUPLICATE KEY UPDATE id = VALUES(id);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...