2013-07-29 2 views
0

фонMySQL - Выберите вместо обновления для тестирования

Я нашел код на wordpress.org forum. Я хотел бы изменить его, чтобы счетчик был установлен в зависимости от того, настроено ли настраиваемое поле i или нет. В моем случае, если пользовательское поле имеет ключ «expired» и значение = «1», его не следует учитывать.

MySQL

Я моем случае SQL будет оказана как это ...

UPDATE wi1_term_taxonomy tt SET count = (SELECT count(p.ID) FROM wi1_term_relationships tr LEFT JOIN wi1_posts p ON (p.ID = tr.object_id AND p.post_type = 'product' AND p.post_status = 'publish') WHERE tr.term_taxonomy_id = tt.term_taxonomy_id) WHERE tt.taxonomy = 'color' 

Пользовательские части поля отсутствует

Чего не хватает является "где" часть где проверяется пользовательское поле.

Вопрос - Выберите результат?

Чтобы ответить на вышеизложенное, можно было бы локализовать для QA. Мой вопрос вместо этого ...

Можно ли изменить запрос так, чтобы я мог быстро его протестировать с помощью select вместо обновления, чтобы увидеть мой результат, прежде чем я позволю ему что-то изменить? Else Мне нужно каждый раз находить и обновлять обновленные значения.

То, что я пытался до сих пор

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

ответ

1

Да, вы должны быть в состоянии проверить свой первый внутренний SELECT запрос, но вам нужно будет заменить тестовое значение для tt.term_taxonomy_id матча:

--UPDATE wi1_term_taxonomy tt SET count = (/* This line is commented out by '--' */ 

    SELECT count(p.ID) FROM wi1_term_relationships tr 
    LEFT JOIN wi1_posts p ON 
    (p.ID = tr.object_id 
    AND p.post_type = 'product' 
    AND p.post_status = 'publish') 
    WHERE tr.term_taxonomy_id = <insert_test_value_here> 

--) WHERE tt.taxonomy = 'color' /* This line is commented out by '--' */ 

Просто вставьте действительное значение для <insert_test_value_here> и она должна Работа.

0

Я хотел бы предложить вам проверить запрос с использованием:

SELECT tr.term_taxonomy_id, count(p.ID) 
FROM wi1_term_relationships tr LEFT JOIN 
    wi1_posts p 
    ON (p.ID = tr.object_id AND p.post_type = 'product' AND p.post_status = 'publish') 

И что вы делаете обновление с помощью объединения:

UPDATE wi1_term_taxonomy tt join 
     (SELECT tr.term_taxonomy_id, count(p.ID) as cnt 
     FROM wi1_term_relationships tr LEFT JOIN 
      wi1_posts p 
      ON (p.ID = tr.object_id AND p.post_type = 'product' AND p.post_status = 'publish') 
     group by term_taxonomy_id 
WHERE tt.taxonomy = 'color'; 

Это позволяет использовать один и тот же запрос, как для тестирования и обновления.