2015-08-21 4 views
0

Я ищу способ обновить третий столбец, добавив значения еще двух столбцов. Проблема, с которой я сталкиваюсь, заключается в том, что для инструкции UPDATE требуется указанная таблица, но я использую «виртуальную» таблицу, выполняя инструкции SELECT и JOIN. Вот код, который я в настоящее время:Обновление значения столбца путем добавления двух значений столбца вместе с помощью запроса выбора соединения

 
    SELECT * 
    FROM wp_posts  AS p 
LEFT JOIN (
      SELECT tr.object_id AS id, 
        t.name  AS physical 
       FROM wp_term_relationships AS tr 
     INNER JOIN wp_term_taxonomy AS x 
        ON (x.taxonomy='pa_physical-inventory' 
        AND x.term_taxonomy_id=tr.term_taxonomy_id) 
     INNER JOIN wp_terms AS t 
        ON t.term_id=x.term_id  
     ) AS mo ON p.id = mo.id 
LEFT JOIN (
      SELECT tr.object_id AS id, 
        t.name  AS murphy 
       FROM wp_term_relationships AS tr 
     INNER JOIN wp_term_taxonomy AS x 
        ON (x.taxonomy='pa_murphy-inventory' 
        AND x.term_taxonomy_id=tr.term_taxonomy_id) 
     INNER JOIN wp_terms AS t 
        ON t.term_id=x.term_id 
     ) AS pa ON p.id = pa.id 
LEFT JOIN (
      SELECT post_id AS id, meta_value AS totalinventory 
      FROM wp_postmeta 
      WHERE meta_key = '_stock' 
     ) AS totalinventory ON p.id = totalinventory.id 
    WHERE p.post_status = 'publish' 
     AND p.post_type = 'product' 

Я ищу, чтобы добавить «Murphy» и «физический» вместе и вставить в «totalinventory» для каждой строки, которая возвращается. Некоторые из этих строк возвращают «нуль» (например, если «murphy» не имеет запаса, который показывает значение null), поэтому я также рассматриваю это как «0» при добавлении значений вместе.

Любая помощь или руководство будут очень благодарны, поскольку я слишком долго царапаю голову над этим.

EDIT: Я открыт для PHP в решении, потому что в конечном итоге это будет запущено с помощью задания cron.

ответ

0

В более простых случаях, как правило, ВЫБИРАЕТ могут быть преобразованы к обновлениям, как так ...

Оператор SELECT:

SELECT * 
FROM [tables and joins] 
WHERE [conditions] 
; 

Оператор UPDATE:

UPDATE [tables and joins (as above)] 
SET tableA.fieldB = tableC.fieldD + tableE.fieldF 
WHERE [conditions (same as above)] 
; 

Конечно, если у вас есть LEFT JOINs вам необходимо будет при необходимости компенсировать; Мне лучше всего выбрать все части, которые вам понадобятся для SET сначала, до, что делает преобразование в запрос UPDATE.

Отказ от ответственности: как я предварял, в зависимости от обстоятельств и данных данных, это не всегда работает.

Смежные вопросы