Этот запрос работает нормально. Теперь я хочу добавить к нему еще одно "правило". Правило, которое я хочу добавить, заключается в обновлении tran_term_taxonomy.description только не дублирующимися записями. Если более ранняя запись в tran_term_taxonomy.description содержит строку "кошка перешла дорогу", то не добавляйте "кошка перешла дорогу" снова во время последующего процесса обновления. Как мне это сделать? Спасибо.

UPDATE `tran_term_taxonomy` SET `description` = (SELECT keyword from `good_keywords` ORDER BY RAND() LIMIT 1,1) WHERE `tran_term_taxonomy`.`taxonomy` = 'post_tag' AND `tran_term_taxonomy`.`description` = '' LIMIT 1 

webportal

Ответов: 1

Ответы (1)

Вы можете использовать проверку NOT EXISTS в своем подзапросе, чтобы определить, использовалось ли ключевое слово ранее в качестве значения description:

UPDATE `tran_term_taxonomy` 
SET `description` = (
  SELECT keyword 
  FROM `good_keywords` 
  WHERE NOT EXISTS (SELECT * FROM (SELECT * FROM `tran_term_taxonomy`) t WHERE description = keyword)
  ORDER BY RAND()
  LIMIT 1
) 
WHERE `tran_term_taxonomy`.`taxonomy` = 'post_tag'
  AND `tran_term_taxonomy`.`description` = ''
LIMIT 1 

Обратите внимание, что если у вас закончились ключевые слова, то значение description будет обновлено на NULL. Чтобы избежать этого, оберните подзапрос в COALESCE:

COALESCE((SELECT keyword ... ), '')

Демо на dbfiddle

2022 WebDevInsider