2014-09-23 7 views
0

У меня есть две таблицы в базе данных wordpress. Одна таблица «пользователей» и содержит столбцы: ID, user_url, user_emailJOIN две таблицы (нужно конкатенировать)

мне нужно присоединиться к этому ко второй таблице «usermeta», которая содержит столбцы: user_id, meta_key, meta_value но необходимо иметь строки сначала конкатенируются.

user_id meta_key meta_value 
1  first_name Joe 
1  last_name Smith 
2  first_name Jane 
2  last_name Doe 

должен стать

user_id meta_key    meta_value 
1  first_name,last_name Joe,Smith 
2  first_name,last_name Jane,Doe 

Я был в состоянии присоединиться к таблицам с помощью:

$result = mysql_query("SELECT * FROM users 
INNER JOIN usermeta ON usermeta.user_id = users.ID 
GROUP BY usermeta.user_id"); 

Однако при печати/вторя результатов, «эхо $ строки [ 'meta_value «];» возвращает только первую строку для данного идентификатора.

Если я не группируют его, я в конечном итоге с несколькими строками для каждого user_id

я могу сделать конкатенации работу с помощью:

$result = mysql_query("SELECT user_id, GROUP_CONCAT(meta_value) AS Customer_Address 
FROM usermeta 
WHERE usermeta.meta_key='first_name' 
or usermeta.meta_key='last_name' 
or usermeta.meta_key='paupress_address_one_1' 
or usermeta.meta_key='paupress_address_city_1' 
or usermeta.meta_key='paupress_address_state_1' 
or usermeta.meta_key='paupress_address_postal_code_1' 
or usermeta.meta_key='user_type' 
or usermeta.meta_key='telephone' 
or usermeta.meta_key='paupress_field_business' 
GROUP BY user_id"); 

Однако это решение не дает мне доступ к первой таблице. Мне нужен способ объединить одну таблицу И присоединить ее к другой на основе идентификатора пользователя, а затем иметь возможность печатать значения для электронной почты, URL-адреса и конкатенированного «Customer_Address»

Я пробовал всевозможные комбинации и подзапросы, но не может сделать эту работу

ответ

0

Вам просто нужно объединить свой первый запрос и второй запрос. Вот сжатая версия:

SELECT u.user_id, 
    u.email, 
    u.url, 
    GROUP_CONCAT(meta_value) AS customer_address 
FROM user u 
    JOIN usermeta um ON u.user_id = um.user_id 
WHERE um.meta_key IN ('first_name','last_name') 
GROUP BY u.user_id 
+0

это сработало отлично! Я потратил 12 часов на это вчера ... большое спасибо вам! –

0

если вы используете WordPress CMS, вы должны запрос следовать WordPress тег: Получить все мета-данные для пользователя:

$all_meta_for_user = get_user_meta(1); 
print_r($all_meta_for_user); 

вы можете получить first_name и last_name через $ all_meta_for_user массив

Или если вы только получаете first_name и last_name, вы можете попробовать это:

echo $user_last = get_user_meta(1, 'first_name', true); 
echo $user_last = get_user_meta(1, 'last_name', true); 

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

Смежные вопросы