2016-11-30 3 views
1

長時間見ることはありません!SQL - 入力する必要がある変数を選択してください

私は自分のサイトに多くのカスタムpost_typeとtoxicomiesを設定した複数のカテゴリシステムを使用しています(Toolset plugin)。

私は自分のサイトの速度を上げるために毎晩cronしたい巨大なクエリからいくつかの投稿をmysqlテーブルに保存しようとしています。

SELECT wp_posts.ID as mid,wp_posts.post_title,wp_posts.post_name,(
    SELECT COUNT(wp_posts.ID) FROM wp_posts INNER JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id) INNER JOIN wp_postmeta AS mt1 ON (wp_posts.ID = mt1.post_id) LEFT JOIN wp_icl_translations t 
    ON wp_posts.ID = t.element_id 
    AND t.element_type = CONCAT('post_', wp_posts.post_type) WHERE 1=1 AND (
     (wp_postmeta.meta_key = 'my_key' AND wp_postmeta.meta_value = mid) 
     AND 
     (
      (mt1.meta_key = 'end_date' AND CAST(mt1.meta_value AS SIGNED) >= date_format(curdate(), '%Y%m%d')) 
      OR 
      (mt1.meta_key = 'end_date' AND CAST(mt1.meta_value AS SIGNED) = '') 
     ) 
    ) AND wp_posts.post_type IN ('bp','code') AND ((wp_posts.post_status = 'publish')) 
) AS countpost 
FROM wp_posts INNER JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id) WHERE 1=1 AND ((wp_postmeta.meta_key = 'top-key' AND wp_postmeta.meta_value = 'yes')) AND wp_posts.post_type = 'my_type' AND ((wp_posts.post_status = 'publish')) GROUP BY wp_posts.ID ORDER BY wp_posts.post_title 

それは素晴らしい仕事が、私は列を追加したい:

は、ここで私がやったことです!

columni希望は、このような「COUNT(wp_posts.ID)クエリ結果」の「term_taxonomy_id」の「配列」のようになります。私の結果は、この

bpo_posts.ID | bpo_posts.post_title | bpo_posts.post_name | COUNT(bpo_posts.ID) | "array" of "term_taxonomy_id" 
1   | the title   | the-title   | 16     | 815,712,1025 
2   | hey you    | hey-you    | 5     | 75,105,200 
... 
... 
のようになります

SELECT group_concat(term_taxonomy_id) FROM `bpo_term_relationships` WHERE `object_id` = id_of_the_current_post_scanned_by_count_query 

は私がこだわっている:( 誰もがアイデアを持って?

感謝。

答えて

0

私は最終的に私がしたいことを達成!これは良いかもしれ

ALTER EVENT wp_mytable 
ON SCHEDULE EVERY 1 DAY 
STARTS '2016-12-02 01:00:00' 
DO 
INSERT INTO wp_mytable (mid, name, title, cats, posts) 
    SELECT wp_posts.ID as mid, @titlex := wp_posts.post_title, @namex := wp_posts.post_name,(
     SELECT group_concat(DISTINCT term_taxonomy_id) FROM `wp_term_relationships` WHERE `object_id` IN (
      SELECT wp_posts.ID as idx FROM wp_posts INNER JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id) INNER JOIN wp_postmeta AS mt1 ON (wp_posts.ID = mt1.post_id) LEFT JOIN wp_icl_translations t 
      ON wp_posts.ID = t.element_id 
      AND t.element_type = CONCAT('post_', wp_posts.post_type) WHERE 1=1 AND (
       (wp_postmeta.meta_key = 'my-key' AND wp_postmeta.meta_value = mid) 
       AND 
       (
        (mt1.meta_key = 'end_date' AND CAST(mt1.meta_value AS SIGNED) >= date_format(curdate(), '%Y%m%d')) 
        OR 
        (mt1.meta_key = 'end_date' AND CAST(mt1.meta_value AS SIGNED) = '') 
       ) 
      ) AND wp_posts.post_type IN ('bp','code') AND ((wp_posts.post_status = 'publish')) 
     ) 
    ) as cats,@countpostx := (
     SELECT COUNT(wp_posts.ID) FROM wp_posts INNER JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id) INNER JOIN wp_postmeta AS mt1 ON (wp_posts.ID = mt1.post_id) LEFT JOIN wp_icl_translations t 
     ON wp_posts.ID = t.element_id 
     AND t.element_type = CONCAT('post_', wp_posts.post_type) WHERE 1=1 AND (
      (wp_postmeta.meta_key = 'my-key' AND wp_postmeta.meta_value = mid) 
      AND 
      (
       (mt1.meta_key = 'end_date' AND CAST(mt1.meta_value AS SIGNED) >= date_format(curdate(), '%Y%m%d')) 
       OR 
       (mt1.meta_key = 'end_date' AND CAST(mt1.meta_value AS SIGNED) = '') 
      ) 
     ) AND wp_posts.post_type IN ('bp','code') AND ((wp_posts.post_status = 'publish')) 
    ) AS countpost 
    FROM wp_posts INNER JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id) WHERE 1=1 AND ((wp_postmeta.meta_key = 'top-key' AND wp_postmeta.meta_value = 'yes')) AND wp_posts.post_type = 'my_type' AND ((wp_posts.post_status = 'publish')) GROUP BY wp_posts.ID ORDER BY wp_posts.post_title 
ON DUPLICATE KEY 
UPDATE `name`[email protected], `title`[email protected], `posts`[email protected], `cats`=cats 

わからないが、それは動作します:)

あなたには、いくつかの説明:)

が必要な場合は確認する:ここで

コードです

関連する問題