好的经过几个小时的研究并仍在使用DB :: select我不得不问这个问题.因为我即将把我的电脑拉下来;).
我想得到用户的最后一个输入(基于时间戳).我可以使用原始sql执行此操作
SELECT c.*, p.*
FROM users c INNER JOIN
(
SELECT user_id,
MAX(created_at) MaxDate
FROM `catch-text`
GROUP BY user_id
) MaxDates ON c.id = MaxDates.user_id INNER JOIN
`catch-text` p ON MaxDates.user_id = p.user_id
AND MaxDates.MaxDate = p.created_at
Run Code Online (Sandbox Code Playgroud)
我从另一个帖子此查询这里的计算器.
我已尝试使用Laravel中的流畅查询构建器完成所有操作,但没有成功.
我知道手册说你可以这样做:
DB::table('users')
->join('contacts', function($join)
{
$join->on('users.id', '=', 'contacts.user_id')->orOn(...);
})
->get();
Run Code Online (Sandbox Code Playgroud)
但这没有多大帮助,因为我不知道如何在那里使用子查询?谁可以点亮我的一天?
我有一张桌子
'products' => ('product_id', 'name', 'description')
Run Code Online (Sandbox Code Playgroud)
和一张桌子
'product_price' => ('product_price_id', 'product_id', 'price', 'date_updated')
Run Code Online (Sandbox Code Playgroud)
我想执行类似的查询
SELECT `p`.*, `pp`.`price`
FROM `products` `p`
LEFT JOIN `product_price` `pp` ON `pp`.`product_id` = `p`.`product_id`
GROUP BY `p`.`product_id`
ORDER BY `pp`.`date_updated` DESC
Run Code Online (Sandbox Code Playgroud)
你可以猜测价格经常变化,我需要拿出最新的价格.麻烦的是我无法弄清楚如何订购LEFT JOINed表.我尝试使用MAX()之类的一些GROUP BY函数,但这样只会拉出列而不是行.
谢谢.