问询处
我目前正在制作一个历史记录/日志页,将显示用户与我的网站支付历史记录。
这两张表分别是taskspayouts
tasks是一个表,其中包含用户可以完成并挣钱的任务。
我使用的返回列是tasks.titletasks.paymenttasks.timestamp
payouts是一个在用户支付收入时保存信息的表。
我使用的返回列是payouts.processorpayouts.amountpayouts.timestamp
问题
我需要运行这两个查询,合并它们(可能有一个类型字段,以便在输出上使用foreach时可以轻松地以不同的方式显示它们),然后按timestamp DESC排序。
尝试
我唯一的尝试是徒劳的,我所做的就是运行两个querys,然后使用array_push来在数组末尾添加任何内容。
问题
当添加一个名为LOG_TYPE的字段时,合并两个查询结果的最佳方法是什么?这样当输出时,我可以这样做

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

结论
任何问题将尽快得到回答,任何编辑将显示在下面。谢谢您。
编辑
根据要求,这是我正在使用的两个查询。
    $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();

最佳答案

正如AgRizzo所评论的,尝试一个简单的联合https://dev.mysql.com/doc/refman/5.0/en/union.html
运行联合时,第一个查询设置字段的名称,并且可以添加其他字符串。因此,一个psuedo示例:

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

07-24 09:38
查看更多