нам нужно предположить, что в старых статьях есть paywall со значением «да»
Просто вставьте «да» для всех старых статей как одноразовую операцию:
INSERT INTO wp_meta (article_id, meta_key, meta_value)
SELECT all_ids.article_id, 'paywall', 'yes'
FROM
(SELECT DISTINCT article_id FROM wp_meta) all_ids
LEFT JOIN
(SELECT article_id FROM wp_meta WHERE meta_key = 'paywall') paywall_ids
ON all_ids.article_id = paywall_ids.article_id
WHERE paywall_ids.article_id IS NULL
Вы можете запустить выбор без вставки, чтобы убедиться, что это будет работать так, как ожидалось. Как это работает:
- получить список всех идентификаторов статей
- получить список только статей, у которых уже есть платный доступ
- осталось присоединиться к платному доступу ко всем Это означает, что любые идентификаторы статей в all_ids, у которых нет соответствия, находятся в paywall_ids, и в столбце paywall_ids.article_id
- будет проверяться пустым
- создать строку для вставки, Определяет платный доступ как да
Альтернативный способ, используемый только в том случае, если вы уверены, что article_ids увеличиваются, и все идентификаторы статей без записи платного доступа происходят перед определенным идентификатором:
INSERT INTO wp_meta (article_id, meta_key, meta_value)
SELECT DISTINCT article_id, 'paywall', 'yes'
FROM
wp_meta
WHERE
article_id < (SELECT MIN(article_id) FROM wp_meta WHERE meta_key = 'paywall')
- найдите первый идентификатор, где использовался платный доступ
- выберите все уникальные идентификаторы товаров до этого и создайте запись платного доступа
- вставьте их
Левый маршрут соединения безопаснее, так как он найдет все статьи, у которых нет платного доступа, а не только те, у которых есть определенный идентификатор. Я предлагаю это только потому, что вы указываете, что включили его в какой-то момент, так что вполне вероятно, что у всех, кто до этого его не имел, и у всех, у кого он есть,
Исправление ваших данных всегда будет предпочтительнее, чем запуск SQL, которые взламывают фальшивые данные, это означает, что вы можете включить некоторые старые статьи в paywall-no, если хотите
Кстати, если вы еще не закончили функцию paywall, самый простой способ - это Вставьте запись платного доступа для всех статей, прежде чем вы включите функцию в прямом эфире! Эти другие сценарии предназначены для тех случаев, когда он уже запущен и некоторые записи не имеют платного доступа. Если вы присваиваете всем значениям значение как часть go live, проблема «у некоторых есть, у некоторых нет» никогда не возникает
INSERT INTO wp_meta (article_id, meta_key, meta_value)
SELECT DISTINCT article_id, 'paywall', 'yes'
FRON wp_meta
Делайте это как часть вашего go live script