MY SQL Query Присоединяйтесь и ищите через соответствующие идентификаторы - PullRequest
0 голосов
/ 23 апреля 2011

У меня нет опыта работы с SQL, но, видимо, это единственный способ добиться того, что мне нужно.

У меня есть две таблицы, одна из которых называется pp_users, а другая pp_userdata

pp_users содержит информацию о каждом пользователе сайта.У каждого пользователя есть идентификатор и адрес электронной почты вместе с дополнительной информацией.Структура столбца:

ID  -  user_email

pp_userdata содержит дополнительную информацию в виде meta_keys с идентификатором, который соответствует идентификатору в pp_users.Таким образом, структура показывает серию дополнительной информации для каждого идентификатора пользователя.Формат:

meta_id   -   user_id   -   meta_key   -   meta_value

Два мета-ключа, которые нам нужны, это значения first_name и last_name

Таким образом, цель состоит в том, чтобы ввести каждого пользователя в pp_usersи затем закажите их по meta_key last_name, используя user_id в pp_userdata.

После некоторого прочтения я считаю, что для присоединения этих двух таблиц потребовалось присоединиться, но я понятия не имею, как получить meta_key по соответствующему user_id.

Есть идеи?

Замечательный

Ответы [ 3 ]

0 голосов
/ 23 апреля 2011

Ваш синтаксис объединения для получения результирующего набора, например:

+------+------------------+----------+-----------+
| id   | user_email       | lastname | firstname |
+------+------------------+----------+-----------+
|    1 | test@example.com | Doe      | John      |
+------+------------------+----------+-----------+

Будет:

 SELECT    id, 
           user_email, 
           meta_lastname.meta_value lastname,  
           meta_firstname.meta_value firstname 
 FROM      pp_users 
 LEFT JOIN pp_userdata meta_lastname 
 ON        meta_lastname.user_id = pp_users.id 
 LEFT JOIN pp_userdata meta_firstname 
 ON        meta_firstname.user_id = pp_users.id 
 WHERE     meta_lastname.meta_key = 'last_name' 
 AND       meta_firstname.meta_key = 'first_name'

Этот запрос объединяется в таблицу pp_userdata несколько раз с разными псевдонимами (здесь псевдонимы meta_firstname и meta_lastname).Вы можете делать это столько раз, сколько хотите, чтобы получить значения из таблицы метаданных - одно соединение для каждого типа ключа.Если вы сохраняете псевдонимы значимыми, легко отслеживать, какая объединенная таблица предоставляет какие столбцы в результате.

0 голосов
/ 23 апреля 2011
SELECT u.ID, u.user_id, a.meta_key, a.meta_value, b.meta_key, b.meta_value
FROM pp_users u
JOIN pp_userdata a ON u.ID = a.user_id AND a.meta_key='last_name'
JOIN pp_userdata b ON u.ID = b.user_id AND b.meta_key='first_name'
ORDER BY a.meta_value

В качестве альтернативы вы можете переместить first_name и last_name part в WHERE предложение

SELECT u.ID, u.user_id, a.meta_key, a.meta_value, b.meta_key, b.meta_value
FROM pp_users u
JOIN pp_userdata a ON u.ID = a.user_id 
JOIN pp_userdata b ON u.ID = b.user_id
WHERE a.meta_key='last_name' AND b.meta_key='first_name'
ORDER BY a.meta_value
0 голосов
/ 23 апреля 2011

Чтобы получить все строки meta_users, связанные с данным пользователем, вы можете использовать следующий запрос.

select meta_users.* 
from pp_users
join meta_users
on pp_users.id = meta_users.user_id
where user_id = (some user ID here);

Чтобы получить определенный ключ, связанный с данным пользователем, вы можете сделать его более конкретным.

select meta_users.* 
from pp_users
join meta_users
on pp_users.id = meta_users.user_id
where user_id = (some user ID here)
and meta_key = (some key name here);

На заказ по фамилии:

select meta_users.* 
from pp_users
join meta_users
on pp_users.id = meta_users.user_id
where user_id = (some user ID here)
and meta_key = 'last_name'
order by meta_value;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...