2015-01-08 2 views
0

Мне нелегко обернуть голову вокруг этого. Я считаю, что это происходит, потому что я присоединяюсь к двум отдельным таблицам на основе одного и того же столбца (user_id), но я не знаю, как это исправить, потому что единственное, что существует между двумя таблицами, это столбец user_id.Объединить строки из двух таблиц с разными столбцами?

Вот запрос.

SELECT users_data_existing.`date`,`message`,`action`,`status`,`data`, 
users_data_new.`date`,`data_new` 
FROM users_data_existing 
INNER JOIN users_data_action USING (action_id) 
INNER JOIN users_data_status_user USING (status_user_id) 
INNER JOIN `users` USING (user_id) 
INNER JOIN users_data_new USING (user_id) 
INNER JOIN data ON users_data_existing.`data_id` = data.`id` 
WHERE users_data_existing.`user_id` = 2 
ORDER BY users_data_existing.`date`,users_data_new.`date` DESC 

В результате, в том, что users_data_new.date и data_new колонны, сцепляются или «добавляется» к предыдущим строкам.

+----------+-----------+-----------+-----------+-----------+----------+-----------+ 
| date | message | action | status | data | date | data_new | 
+----------+-----------+-----------+-----------+-----------+----------+-----------+ 
|2011-01-01| data | data | data | data |2011-01-02| data_new | 
----------------------------------------------------------------------------------- 
|2011-01-01| data | data | data | data |2011-01-03| data_new1 | 
----------------------------------------------------------------------------------- 

       REPEATS PATTERN FOR TOTAL RECORDS IN users_data_new TABLE 

+----------+-----------+-----------+-----------+-----------+----------+-----------+ 
| date | message | action | status | data | date | data_new | 
+----------+-----------+-----------+-----------+-----------+----------+-----------+ 
|2011-01-01| data1 | data1 | data1 | data1 |2011-01-02| data_new | 
----------------------------------------------------------------------------------- 
|2011-01-01| data1 | data1 | data1 | data1 |2011-01-03| data_new1 | 
----------------------------------------------------------------------------------- 

Но это не то, что мне нужно. Как я могу получить последние два столбца в отдельной строке? Я думаю, что UNION разрешит это, но я не могу этого сделать, потому что таблицы почти идентичны, но не разделяют столбец message.

+0

Если вам нравится, рассмотрите следующий простой двухэтапный курс действий: 1. Если вы еще этого не сделали, предоставьте надлежащие DDL (и/или sqlfiddle), чтобы мы могли легче реплицировать проблему. 2. Если вы еще этого не сделали, укажите желаемый набор результатов, соответствующий информации, представленной на шаге 1. – Strawberry

ответ

0

Как и ожидалось в вопросе, мне нужен был UNION. Хитрость заключалась в создании пустого столбца в users_data_new для соответствия users_data_existing. У меня также была проблема с сортировкой, поэтому я также включу это здесь.

(SELECT data_existing.date AS submitdate,status_user.status,action.action, 
data.data,data_existing.message 
FROM users_data_existing AS data_existing 
INNER JOIN users_requested_status_user status_user 
ON data_existing.status_user_id = status_user.status_user_id 
INNER JOIN users_requested_action action 
ON data_existing.action_id = action.action_id 
INNER JOIN websites data 
ON data_existing.data_id = data.id 
ORDER BY data_existing.date DESC) //sorts sub-query 

UNION ALL 

(SELECT data_new.date AS submitdate,status_user.status, 
action.action,data_new.data_new,'' message //needed to add this last empty column 
FROM users_data_new AS data_new 
INNER JOIN users_requested_status_user status_user 
ON data_new.status_user_id = status_user.status_user_id 
INNER JOIN users_requested_action action 
ON data_new.action_id = action.action_id 
ORDER BY data_new.date DESC) //sorts sub-query 
ORDER BY submitdate DESC"; //sorts the entire result 

Имейте в виду, что с псевдонимом на дату, ассоциативный массив ключей будет независимо от псевдонима имя, которое вы используете. то есть $result['submitdate']

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