首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql将数据插入到另一个

mysql将数据插入到另一个
EN

Stack Overflow用户
提问于 2016-10-06 23:00:48
回答 1查看 35关注 0票数 3

我有以下mysql db表结构:

Table_1

我需要将这些值(post_id及其相应的geo_latgeo_lon插入到另一个表中,如下所示)

Table_2

到目前为止,这就是我所拥有的:

代码语言:javascript
复制
$query = "INSERT INTO table_2(post_id,geo_lat,geo_lon)
          SELECT post_id,meta_key IN(geo_lat),meta_key IN(geo_lon) //????
          FROM table_1";
$wpdb->query($query);

当然,这是错误的,我有点被困在如何做它(相当新的php)。

有人能帮我吗?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-06 23:42:32

您可以同时使用GROUP BYMAX来“旋转”这些值:

代码语言:javascript
复制
INSERT INTO table_2 (Post_id, Geo_lat, Geo_lon)
     SELECT post_id,
            MAX(IF(meta_key='geo_lat',meta_value,NULL)),          
            MAX(IF(meta_key='geo_lon',meta_value,NULL))
       FROM table_1
   GROUP BY post_id

这有点不言自明,但是如果您想更好地理解这个查询,可以尝试使用一个更简单的SELECT语句:

代码语言:javascript
复制
SELECT post_id,
       IF(meta_key='geo_lat',meta_value,NULL) lat,
       IF(meta_key='geo_lon',meta_value,NULL) lon
  FROM table_1

这样做是返回一个三列集,第一列是ID,第二列(在这里命名为lat )只有在行中的meta_keygeo_lat时才会带来meta_value,否则是NULL。第三列相同,但适用于geo_lon。它将生成如下所示的集合:

代码语言:javascript
复制
+---------+---------+---------+
| post_id | lat     | lon     |
+---------+---------+---------+
| 1       | 12.400  | NULL    |
| 1       | NULL    | 123.000 |
| 2       | 234.200 | NULL    |
| 2       | NULL    | 4.200   |
+---------+---------+---------+

然后,在ID相同时,使用GROUP_BY对行进行分组,在latlon上使用的值将由MAX决定。由于NULL总是“较小”,因此只会选择非空值有效地将行连接到:

代码语言:javascript
复制
  SELECT post_id,
         MAX(IF(meta_key='geo_lat',meta_value,NULL)) lat,
         MAX(IF(meta_key='geo_lon',meta_value,NULL)) lon
    FROM table_1
GROUP BY post_id
代码语言:javascript
复制
+---------+---------+---------+
| post_id | lat     | lon     |
+---------+---------+---------+
| 1       | 12.400  | 123.000 |
| 2       | 234.200 | 4.200   |
+---------+---------+---------+
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39906902

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档