问询处
我目前正在制作一个历史记录/日志页,将显示用户与我的网站支付历史记录。
这两张表分别是tasks
和payouts
tasks
是一个表,其中包含用户可以完成并挣钱的任务。
我使用的返回列是tasks.title
,tasks.payment
和tasks.timestamp
payouts
是一个在用户支付收入时保存信息的表。
我使用的返回列是payouts.processor
,payouts.amount
和payouts.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