gpt4 book ai didi

mysql - 为多个变量 ID 插入多个静态值

转载 作者:可可西里 更新时间:2023-11-01 07:08:57 25 4
gpt4 key购买 nike

一些背景故事(与我的问题没有直接关系,但也许其他人可以使用我的方法)

我正在使用高级自定义字段插件在 WordPress v3.9.1 中工作。我已经从旧数据库中导入了自定义值的 CSV 文件(使用 WP Ultimate CSV Importer 插件,免费版),在 WordPress 中按照我的需要格式化,但有一个异常(exception) - ACF Repeater Fields。该插件很棒,但目前还没有导入大量数据的好方法。

转发器字段在数据库中存储如下:

meta_id  post_id meta_key           meta_value
3894 4697 beds 2
3895 4697 _beds field_53bcfe244a98d
4051 4697 _beds_0_other field_53c2273053218
4050 4697 beds_0_other 1
4051 4697 _beds_1_other field_53c2273053218
4050 4697 beds_1_other 3

5894 4698 beds 2
5895 4698 _beds field_53bcfe244a98d
5051 4698 _beds_0_other field_53c2273053218
5050 4698 beds_0_other 1
5051 4698 _beds_1_other field_53c2273053218
5050 4698 beds_1_other 3

也就是说;对于每个 post_id,都有一个名为“beds”的 Repeater 字段。 “在”中继场是1个场,重复两次。每个字段都有 2 个数据库条目 - 一个字段引用(用于管理保存字段 - 每个字段始终相同)和一个值。设置并不像它可能的那样直观,但它是围绕 WordPress 的默认表系统设计的。

实际问题

现在,我从我的旧数据库中导入了如下所示的字段:

meta_id  post_id meta_key           meta_value
#### 4697 beds 2
#### 4697 beds_0_other 1
#### 4697 beds_1_other 3

#### 4698 beds 2
#### 4698 beds_0_other 1
#### 4698 beds_1_other 3

我需要添加

meta_id  post_id meta_key           meta_value
#### 4697 _beds field_53bcfe244a98d
#### 4697 _beds_1_other field_53c2273053218
#### 4697 _beds_0_other field_53c2273053218

#### 4698 _beds field_53bcfe244a98d
#### 4698 _beds_1_other field_53c2273053218
#### 4698 _beds_0_other field_53c2273053218

meta_key 和 meta_value 是静态的——它们永远不会改变(字段创建后它会保留相同的字段_## 直到删除)。 meta_id 是自增的。

问题是我有 200 多个 post_id 值,每个值都需要 50 个静态条目 - 不想对其进行硬编码。我可以使用以下方法选择所需的 ID:

SELECT DISTINCT ID
FROM `wp_posts`
WHERE post_type = "community"

// Returns:
post_id
4697
4698

简而言之

我怎样才能做到以下几点:

INSERT INTO `table` (`meta_id`, `post_id`, `meta_key`, `meta_value`)
VALUES
// foreach related distinct ID in wp_posts
(NULL, 'ID', "_beds", "field_53bcfe244a98d"),
(NULL, 'ID', "_beds_0_other", "field_53c2273053218"),
(NULL, 'ID', "_beds_1_other", "field_53c2273053218")
// end foreach

** 临时解决方案**

目前,我只是使用 PHP 转储所有数据并将其上传到 PHPMyAdmin 中。可以编写一个用于插入的 PHP 循环,但我正在寻找无需上传新 php 文件(或 sql)即可使用的 MySQL 解决方案。

$ids = array("4697", "4698" );

echo '
INSERT INTO `table` (`meta_id`, `post_id`, `meta_value`, `meta_key`)
VALUES<br />';
foreach ($ids as $id){
echo '
(NULL, "'. $id .'", "1", "beds"),
(NULL, "'. $id .'", "field_53bcfe244a98d", "_beds"),
(NULL, "'. $id .'", "field_53c2273053218", "_beds_0_other"),
<br />';

}

最佳答案

最简单的方法是将隐藏的自定义字段(前导下划线)与元值一起导入。如果你只想清理数据,你可以使用 UNION SELECT 作为你的 INSERT 的输入 - 你不需要 meta_id , 它将自动分配。请注意,此 SQL 不会在执行插入操作之前检查数据是否已存在,因此请确保您不会以欺骗告终。

您可以通过查询 wp_postmeta 来获取您需要的 post_id 所有带有 meta_key 为“beds”的条目。使用此 post_id 您可以对其他值进行硬编码并将它们别名为 SELECT 语句中的列,然后将其用于 INSERT.

-- modify the wp_ prefix as needed
INSERT INTO `wp_postmeta` (`post_id`, `meta_key`, `meta_value`)
-- get "_beds" key/value for all entries with meta key of "beds"
SELECT post_id, '_beds' AS meta_key, 'field_53bcfe244a98d' AS meta_value
FROM wp_postmeta WHERE meta_key = 'beds'
UNION
-- get "_beds_0_other" key/value for all entries with meta key of "beds"
SELECT post_id, '_beds_0_other' AS meta_key, 'field_53c2273053218' AS meta_value
FROM wp_postmeta WHERE meta_key = 'beds'
UNION
-- get "_beds_1_other" key/value for all entries with meta key of "beds"
SELECT post_id, '_beds_1_other' AS meta_key, 'field_53c2273053218' AS meta_value
FROM wp_postmeta WHERE meta_key = 'beds'
-- order results (you can view what will be inserted if you run the SELECT without the INSERT)
ORDER BY post_id

您也可以将其作为三个不同的 INSERT 语句运行,而无需 UNION

关于mysql - 为多个变量 ID 插入多个静态值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24730376/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com