SQL - 转置一列并从相邻列中获取值 - wordpress table wp_usermeta

SQL - transpose a column and grab the value from the adiacent column - wordpress table wp_usermeta

我对 SQL 和 Wordpress 不是很熟练。我在 wordpress 上制作了一些表格,当添加数据时,所有值都插入到这个 Wordpress table

table的名字是wp_usermeta,是这样组成的 umeta_id - user_id - meta_key - meta_value

现在我已经使用此 sql 代码将 table 复制到一个新的 创建 TABLE elaborazione_Meta_User_data 喜欢 wp_usermeta; 插入 elaborazione_Meta_User_data SELECT * 来自 wp_usermeta

这样我可以在不丢失数据的情况下进行任何“修改”

我的目标就是从这个情况入手

umeta_id - user_id - meta_key - meta_value
1
2
3
4

走到这一步

我明白我必须转置一些东西,但我现在知道该怎么做了。

应该有助于解决此问题的其他信息:

  1. 如果有一种方法可以“识别”此 table 中用户的 ID,那么创建 sql 代码
  2. 应该很简单
  3. meta_key 相同。这些应该是新列
  4. 列中的数据应由 meta_value
  5. 中的值填充
  6. 在“相同值”的情况下,要“更新”的值和在代码末尾看到的值应该是 usermeta_ID
  7. 中具有更高值的值
  8. 下次我会从头开始在一个新的table中添加所有数据,以防止出现此问题

您可以使用 mysql 的 GROUP_CONCAT 函数来完成此操作。查看此 link 以获得有关如何使用它的深入教程。 https://ubiq.co/database-blog/transpose-rows-columns-dynamically-mysql/

您使用条件聚合进行透视:

select user_id, 
    max(case when meta_key = 'State' then meta_value end) state,
    max(case when meta_key = 'Addresss' then meta_value end) address,
    max(case when meta_key = 'House_address1' then meta_value end) house_address1,
    max(case when meta_key = 'type_house1' then meta_value end) type_house1,
    max(case when meta_key = 'House_address2' then meta_value end) house_address2,
    max(case when meta_key = 'type_house2' then meta_value end) type_house2
from wp_usermeta
group by user_id