1

情報

私は現在、私のウェブサイトでユーザーの支払い履歴を表示する履歴/ログ ページを作成しています。

2 つのテーブルはtaskspayouts

tasksユーザーが完了してお金を稼ぐことができるタスクでいっぱいのテーブルです。私が使用する返された列はtasks.titletasks.paymentおよびtasks.timestamp

payoutsユーザーが収益を支払うときに情報を保存するテーブルです。私が使用する返された列はpayouts.processorpayouts.amountおよびpayouts.timestamp

問題

両方のクエリを実行し、それらをマージして (出力で foreach を使用するときに簡単に異なる方法で表示できるように、おそらく型フィールドを使用して)、タイムスタンプ DESC で並べ替える必要があります。

試み

私の唯一の試みは無益でした.私がしたことは、両方のクエリを実行してarray_pushから、配列の最後に何も追加しなかったものを使用することだけでした.

質問

というフィールドを追加しながら2つのクエリ結果をマージする最良の方法は何でしょうか。LOG_TYPE出力時にこのようなことができます

foreach($data as $row){
    if($row['LOG_TYPE'] == 1){
        // Display Payout
    }    else    {
        // Display Task
    }
}

結論

質問はできるだけ早く回答され、編集内容は下に表示されます。ありがとうございました。

編集

リクエストに応じて、使用している 2 つのクエリを次に示します。

    $STH = $this->database->prepare('SELECT * FROM tasks WHERE completed_by = :userid  ORDER BY timestamp DESC');
    $STH->execute(array(':userid' => $user));
    $data = $STH->fetchAll();

    $STH = $this->database->prepare('SELECT * FROM payouts WHERE user = :userid ');
    $STH->execute(array(':userid' => $user));
    $payouts = $STH->fetchAll();
4

2 に答える 2

0

AgRizzo がコメントしたように、単純な UNION を試してください https://dev.mysql.com/doc/refman/5.0/en/union.html

UNION を実行すると、最初のクエリでフィールドの名前が設定され、さらに文字列を追加できます。したがって、疑似例:

SELECT "1" AS `log_type`, tasks.title, tasks.payment, tasks.timestamp
FROM tasks
WHERE tasks.user_id = 12
UNION
SELECT "2", payouts.processor, payouts.amount , payouts.timestamp
FROM payouts
WHERE payouts.user_id = 12
ORDER BY 4
于 2013-11-14T12:42:18.680 に答える