Как сделать поиск в двух таблицах?
Есть 2 таблицы: и wp_posts и wp_reviews.
Подскажите как обновить статус поста в таблице wp_posts (`post_status`) на 'draft' для тех записей, у которых в таблице wp_reviews нет строк. wp_posts `ID` равен wp_reviews `company_id`
т.е. если в таблице wp_reviews запись с company_id=2001 не существует, то для таблицы wp_posts для строки с ID=2001 обновляем post_status на 'draft'
Дополнительно:
т.е. если в таблице wp_reviews запись с company_id=2001 не существует, то для таблицы wp_posts для строки с ID=2001 обновляем post_status на 'draft'
Как бы, у вас уже на 80% запрос сформирован на естественном языке пригодный для прямого транслирования в SQL. Как-то стыдно не записать его прямым текстом:
update wp_posts p set p.post_status = 'draft' where not exists (select 1 from wp_reviews r where r.связующий_ключ = p.связующий_ключ) |
update wp_posts p set p.post_status = 'draft' where not exists (select 1 from wp_reviews r where r.связующий_ключ = p.связующий_ключ)
Осталось определиться, как называются ключи в той и другой таблице, связывающие данные этих таблиц.
PS: вероятно это: r.company_id = p.id.
- да пробовал, чтото ошибка вылетала при моих запросах.
не конкретно для id=2001, а для всех, которых нет в таблице wp_reviews
- какой текст ошибки?
- alexalexes, пробую просто выборку
SELECT * FROM wp_posts a
NOT EXISTS (SELECT * FROM wp_reviews b where a.ID = b.company_id)(1064): Syntax error near 'NOT EXISTS (SELECT * FROM wp_reviews b where a.ID = b.company_id)' at line 2
ваш запрос тоже работает, но надо сделать не только дя id=2001, а для всех отсутствующих записей
- Уберите из where "p.id = 2001 and" и получите условие для всех записей.
SELECT * FROM wp_posts a
/* куда дели where ????? */
NOT EXISTS (SELECT * FROM wp_reviews b where a.ID = b.company_id) - действительно, спасибо
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос

Для того чтобы выполнить поиск данных в двух таблицах одновременно, можно воспользоваться оператором UNION в SQL. UNION объединяет результаты двух SELECT запросов в один результат.
Пример SQL запроса для выполнения поиска в двух таблицах:
SELECT column1, column2 FROM table1 WHERE column1 = 'value' UNION SELECT column1, column2 FROM table2 WHERE column1 = 'value';
В данном примере мы ищем значения в столбцах column1 и column2 из двух таблиц table1 и table2, где значение в column1 равно 'value'. UNION объединяет результаты запросов из обеих таблиц.
Если необходимо добавить дополнительные условия для поиска, их можно также указать в каждом из SELECT запросов перед оператором UNION.
Обрати внимание, что структура таблиц (названия столбцов, их типы и т.д.) должна быть схожей, чтобы можно было выполнить UNION запрос.
Таким образом, используя UNION в SQL, можно осуществлять поиск данных в двух и более таблицах одновременно.