2013-03-26 2 views
0

Я создаю страницу социальных сетей и хочу, чтобы все действия пользователя были на странице канала.Получить данные из двух таблиц, используя один запрос MySQL?

У меня есть комментарии таблицу:

user_id comment    date 
1   "Hi...."    24 March 2013 
2   "Hello..."    25 March 2013 
1   "Another comment..." 26 March 2013 

И стол любит:

user_id id_of_liked_item  date 
1   101     24 March 2013 
1   145     25 March 2013 

Можно ли выполнить один запрос, чтобы получить их в массив всей деятельности пользователя, упорядоченный по дате? Если да, то каким будет выглядеть этот запрос? Мой массив должен был бы выглядеть примерно так:

$activity = array(
    array(
     "type"=>"comment", 
     "content"=>"Comment goes here" 
    ), 
    array(
     "type"=>"like", 
     "item_id"=>345, 
    ) 
) 

Я очень хорошо манипулирования данными PHP, так что я, вероятно, не нужно много помощи организации массива, но мой вопрос заключается в основном, как получить данные из базы данных в первую очередь. Благодаря

+0

посмотрите на [SQL JOIN] (http://www.w3schools.com/sql/sql_join.asp) – Daanvn

ответ

1

Да, СОЕДИНЕНИЕ путь:

SELECT 'comment' AS Type, Comment AS Content, NULL as Item_ID, Date 
    FROM Comments 
    WHERE User_Id = 1 
UNION ALL SELECT 'like', NULL, id_of_liked_item, Date 
    FROM Likes 
    WHERE User_Id = 1 

Это даст вам результирующий набор, который выглядит следующим образом:

Type Content   Item_ID Date 
------- ------------------ ------- ------------- 
comment Hi....    null 24 March 2013 
comment Another comment... null 26 March 2013 
like null    101  24 March 2013 
like null    145  25 March 2013 

И вы можете взять его оттуда.

1

Простейший способ, вероятно, будет использовать союз:

SELECT 
    'comment' AS type, 
    comment AS content, 
FROM comments 
UNION 
SELECT 
    'like' AS type, 
    id_of_liked_item AS item_id 

Конечно, Вы можете также добавить WHERE условия и дополнительные столбцы для каждого запроса в объединении для организации пользователя.

1

Попробуйте использовать UNION:

SELECT * FROM 
(SELECT `user_id`, `comment` AS activity, `date` FROM comments 

UNION 

SELECT `user_id`, `id_of_liked_item` AS activity, `date` FROM likes) 

AS user_activity 

ORDER BY user_activity.`date` 
Смежные вопросы