使用 MYSQL 和多个术语在 wordpress 中重新索引自定义 table
Re-Indexing custom table in wordpress with MYSQL with multiple terms
我目前正在为我的 Wordpress 数据库中的自定义 table 重新编制索引。我正在成功收集数据值,但是我正在努力收集所有 $wpdb->terms.
某些 posts 有不止一个与之相关的术语,例如我有一个自定义 post 类型(stores)并且在这个自定义分类法 (products-sold) 并且在这个自定义分类法中我有一个包含 4 个术语的列表 (Term A, Term B, Term C, Term D).
我已经设法用除 Colomn "post_terms" 之外所需的信息填充新数据库,第一个术语已添加,但我需要添加其他关联的术语(如果它们存在)以便单元格显示每个由逗号分隔的 slug (slug-A, slug-B)。
$sql = "";
$sql .= "INSERT INTO $this->tablename (`post_id`, `post_type`, `post_terms`, `lat`, `lng`) ";
$sql .= "SELECT * FROM (";
$sql .= "
SELECT
`$wpdb->posts`.`ID` AS `post_id`,
`$wpdb->posts`.`post_type`,
`$wpdb->terms`.`slug` AS `post_terms`,
`lat_field`.`meta_value` AS `lat`,
`lng_field`.`meta_value` AS `lng`
FROM
`$wpdb->posts`
INNER JOIN $wpdb->term_relationships ON($wpdb->posts.ID = $wpdb->term_relationships.object_id)
INNER JOIN $wpdb->term_taxonomy ON($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
INNER JOIN $wpdb->terms ON($wpdb->term_taxonomy.term_id = $wpdb->terms.term_id)
LEFT JOIN `$wpdb->postmeta` AS `lat_field` ON (`$wpdb->posts`.`ID` = `lat_field`.`post_id` AND `lat_field`.`meta_key` IN ('".implode('\', \'',$this->keys['lat'])."'))
LEFT JOIN `$wpdb->postmeta` AS `lng_field` ON (`$wpdb->posts`.`ID` = `lng_field`.`post_id` AND `lng_field`.`meta_key` IN ('".implode('\', \'',$this->keys['lng'])."'))
WHERE `$wpdb->posts`.`post_status` = 'publish' AND (`lat_field`.`meta_value` IS NOT NULL OR `lng_field`.`meta_value` IS NOT NULL) AND " . $wpdb->term_taxonomy . ".taxonomy = 'products-sold'
";
$sql .= ") AS `t`";
$sql .= " ON DUPLICATE KEY UPDATE `lat` = VALUES(`lat`), `lng` = VALUES(`lng`)";
$wpdb->query($sql);
这是我上面的工作代码,如有任何帮助,我们将不胜感激。
没有时间进行冗长而恼怒的回答....
你会想要:
GROUP_CONCAT(slug
, ',')
并添加一个 GROUP BY post_id
这将显示为该行串联并以逗号分隔的所有 slug。
这些 slug 将在 post_id 上进行匹配和分组。每个结果应该有一个不同的 post_id 实体。
我目前正在为我的 Wordpress 数据库中的自定义 table 重新编制索引。我正在成功收集数据值,但是我正在努力收集所有 $wpdb->terms.
某些 posts 有不止一个与之相关的术语,例如我有一个自定义 post 类型(stores)并且在这个自定义分类法 (products-sold) 并且在这个自定义分类法中我有一个包含 4 个术语的列表 (Term A, Term B, Term C, Term D).
我已经设法用除 Colomn "post_terms" 之外所需的信息填充新数据库,第一个术语已添加,但我需要添加其他关联的术语(如果它们存在)以便单元格显示每个由逗号分隔的 slug (slug-A, slug-B)。
$sql = "";
$sql .= "INSERT INTO $this->tablename (`post_id`, `post_type`, `post_terms`, `lat`, `lng`) ";
$sql .= "SELECT * FROM (";
$sql .= "
SELECT
`$wpdb->posts`.`ID` AS `post_id`,
`$wpdb->posts`.`post_type`,
`$wpdb->terms`.`slug` AS `post_terms`,
`lat_field`.`meta_value` AS `lat`,
`lng_field`.`meta_value` AS `lng`
FROM
`$wpdb->posts`
INNER JOIN $wpdb->term_relationships ON($wpdb->posts.ID = $wpdb->term_relationships.object_id)
INNER JOIN $wpdb->term_taxonomy ON($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
INNER JOIN $wpdb->terms ON($wpdb->term_taxonomy.term_id = $wpdb->terms.term_id)
LEFT JOIN `$wpdb->postmeta` AS `lat_field` ON (`$wpdb->posts`.`ID` = `lat_field`.`post_id` AND `lat_field`.`meta_key` IN ('".implode('\', \'',$this->keys['lat'])."'))
LEFT JOIN `$wpdb->postmeta` AS `lng_field` ON (`$wpdb->posts`.`ID` = `lng_field`.`post_id` AND `lng_field`.`meta_key` IN ('".implode('\', \'',$this->keys['lng'])."'))
WHERE `$wpdb->posts`.`post_status` = 'publish' AND (`lat_field`.`meta_value` IS NOT NULL OR `lng_field`.`meta_value` IS NOT NULL) AND " . $wpdb->term_taxonomy . ".taxonomy = 'products-sold'
";
$sql .= ") AS `t`";
$sql .= " ON DUPLICATE KEY UPDATE `lat` = VALUES(`lat`), `lng` = VALUES(`lng`)";
$wpdb->query($sql);
这是我上面的工作代码,如有任何帮助,我们将不胜感激。
没有时间进行冗长而恼怒的回答....
你会想要:
GROUP_CONCAT(slug
, ',')
并添加一个 GROUP BY post_id
这将显示为该行串联并以逗号分隔的所有 slug。 这些 slug 将在 post_id 上进行匹配和分组。每个结果应该有一个不同的 post_id 实体。