1

ソーシャルネットワーキングページを作成していて、フィードページですべてのユーザーのアクティビティを取得したいと考えています。

コメントテーブルがあります:

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データの操作が非常に得意なので、配列を整理するのにそれほど助けは必要ないでしょうが、私の質問は主に、最初にデータベースからデータを取得する方法です。ありがとう

4

3 に答える 3

1

最も簡単な方法は、おそらくユニオンを使用することです。

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

もちろんWHERE、ユーザーごとに整理するために、ユニオン内の各クエリに条件と追加の列を追加することもできます。

于 2013-03-26T15:35:11.280 に答える
1

はい、UNIONは行く方法です:

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

そして、あなたはそこからそれを取ることができます。

于 2013-03-26T15:39:34.800 に答える
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`
于 2013-03-26T15:43:41.213 に答える