SQL — транспонировать столбец и получить значение из смежного столбца — таблица WordPress wp_usermeta

#mysql #sql #wordpress #pivot #aggregate-functions

#mysql #sql #wordpress #сводная #агрегатные функции

Вопрос:

Я не слишком разбираюсь в SQL и WordPress. Я создал некоторую форму на WordPress, и при добавлении данных все значения вставляются в эту таблицу WordPress введите описание изображения здесь

имя таблицы — wp_usermeta и составлено таким образом, что umeta_id — user_id — meta_key — meta_value

Теперь я скопировал таблицу в новую, используя этот sql-код CREATE TABLE elaborazione_Meta_User_data LIKE wp_usermeta ; ВСТАВИТЬ В elaborazione_Meta_User_data SELECT * FROM wp_usermeta

Таким образом, я могу выполнять любые «модификации» без потери данных

Моя цель — начать с этой ситуации

umeta_id - идентификатор пользователя - мета_ключ - мета_значение 1 2 3 4

Чтобы прийти к этой ситуации

! [введите описание изображения здесь

Я понимаю, что мне нужно что-то транспонировать, но теперь я знаю, как это сделать.

Другая информация, которая должна помочь решить эту проблему:

  1. если есть способ «идентифицировать» идентификаторы пользователей в этой таблице, возможно, должно быть просто создать код sql
  2. то же самое для meta_key. Это должны быть новые столбцы
  3. данные в столбце должны быть заполнены значением в meta_value
  4. в случае «того же значения» значение, подлежащее «обновлению» и отображаемое в конце кода, должно быть тем, которое имеет более высокое значение в usermeta_ID
  5. в следующий раз я собираюсь добавить все данные в новую таблицу с самого начала, чтобы предотвратить эту проблему

Ответ №1:

Вы сводите с помощью условной агрегации:

 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
  

Ответ №2:

Для этого вы можете использовать GROUP_CONCAT функцию mysql. Ознакомьтесь с этой ссылкой для получения подробного руководства о том, как его использовать. https://ubiq.co/database-blog/transpose-rows-columns-dynamically-mysql /