#mysql #sql
#mysql #sql
Вопрос:
У меня есть два простых оператора sql, оба работают независимо, но я хотел бы объединить их вместе. У меня есть только артикул продукта, поэтому я пытаюсь получить post_id из артикула. Затем обновите количество акций на основе post_id
Это захватывает post_id
Select post_id from wp_postmeta
where meta_value = 'xxxxxxx'
Это обновляет запасы
UPDATE wp_postmeta
SET meta_value = 1000
WHERE meta_key = '_stock'
AND post_id = RESULT FROM SELECT
Я не могу просто обновить stock через sku, поскольку woocommerce хранит sku и stock как meta_key, так и meta_value.
Огляделся и увидел много вещей, связанных с обновлением выбранных строк, но я не пытаюсь этого добиться, я пытаюсь использовать результат выбора в обновлении.
В качестве альтернативы, это даже применимое приложение для SQL, у меня это работает, но просто возвращает результат выбора, сохраняя как переменную в php, а затем используя в инструкции update. Может быть, это правильно с архитектурной точки зрения?
Комментарии:
1. Пометьте свой вопрос базой данных, которую вы используете.
2. Этот вопрос не имеет ничего общего с PHP, поэтому, пожалуйста, не помечайте его как таковой.
3. Оба допустимых пункта, исправлены
Ответ №1:
В большинстве баз данных вы просто используете стандартный синтаксис SQL:
UPDATE wp_postmeta
SET meta_value = 1000
WHERE meta_key = '_stock' AND
post_id IN (SELECT post_id
FROM wp_postmeta
WHERE meta_value = 'xxxxxxx'
);
Единственная база данных, где это не работает, — это MySQL, которую, вероятно, вы используете. Для этого вам нужно явное JOIN
:
UPDATE wp_postmeta pm JOIN
wp_postmeta pm2
ON pm.post_id = pm2.post_id AND
pm2.meta_value = 'xxxxxxx'
SET meta_value = 1000
WHERE pm.meta_key = '_stock' ;