Как построить таблицу из двух таблиц, одна с бесполезным уникальным идентификатором (таблица WordPress wp_usermeta) - PullRequest
1 голос
/ 13 июня 2019

История использования : я использую сайт WordPress для управления членством, и программное обеспечение ID Card на моем ПК подключается к таблице для генерирования информации. Может подключаться только к одному столу.

Цель : мне нужна таблица с именем «id_card», которая содержит столбцы (member_number, first_name, last_name, exp_date), и она заполнена пользователями, которые были изменены в течение последнего месяца («членство») В таблице есть столбец с названием «moddate», который я могу использовать в качестве критерия).

Задача 1 : мне нужно извлечь exp_date из таблицы "members", а другие значения - member_number, first_name, last_name - все они взяты из таблицы с именем "wp_usermeta" (таблица по умолчанию для WordPress ). Обе исходные таблицы содержат user_id, чтобы связать информацию с той же учетной записью пользователя. Я считаю, что для этого требуется какой-то LEFT JOIN, но я не смог заставить его работать.

Задача 2 : более сложная задача: таблица wp_usermeta содержит все различные пользовательские атрибуты в ROWS вместо COLUMNS. Таким образом, столбцы называются «user_id, meta_key, meta_value», и для одного пользователя может быть 30 строк. Если я хочу выбрать имя пользователя 49, оно выглядит примерно так:

SELECT meta_value FROM wp_usermeta WHERE user_id=49 AND meta_key='first_name'

Вопрос : Как мне написать этот запрос, чтобы он INSERT INTO передавал таблице "id_card" значения из двух таблиц, используя user_id, чтобы все это выстраивалось, особенно когда я могу ' t only user_id в качестве уникального идентификатора (т. е. единственный способ, которым я знаю, чтобы сузить его до чьего-то имени, это использовать обоих их user_id и meta_key) в таблице wp_usermeta?

1 Ответ

1 голос
/ 13 июня 2019

Существует серьезная проблема с желанием скопировать данные. Если пользователь изменит свои данные, ваша копия будет устаревшей. Если вы посмотрите на таблицу wp_users, там есть поле ID. Это указывает на соответствующие записи в таблице wp_usermeta (user_id)

SELECT `wp_users`.*
    , `wp_usermeta`.*
FROM `wp_users`
    INNER JOIN `wp_usermeta` ON (`wp_users`.`ID` = `wp_usermeta`.`user_id`)
WHERE ID=1;

Теперь это вернет несколько строк. Если вы хотите одну запись, вам нужно сделать

SELECT`wp_users`.*
    , (SELECT meta_key FROM wp_usermeta WHERE meta_key='wp_user_level' AND user_id=1) AS user_level
    , (SELECT meta_key FROM wp_usermeta WHERE meta_key='show_syntax_highlighting' AND user_id=1) AS syntax_highlighting
FROM `wp_users`
 WHERE ID=1;

Просто повторите операторы подзапроса для той информации, которую вы хотите вернуть. Подзапрос может возвращать только одно значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...