我有一个表products
,其中 id 的产品和名称。
第二个表格为products_last_usage
,我保留 product_id , user_id 和 last_used_at 。
每当用户点击某个产品时,我都会更新字段 last_used_at 。
现在,我需要一个查询来列出所有产品,然后先按last_used_at排序,然后按产品名称排序。它必须 PER USER 。即每个用户都有自己的表格顺序。
但我需要所有产品,即使第二张表中没有它们的记录。
怎么做?
您可以帮我查询rails查询或mysql查询。
答案 0 :(得分:2)
您可以使用left join
:
select p.*
from products p left join
products_last_usage plu
on plu.product_id = p.id and plu.user_id = $user_id
order by (last_used_at is not null) desc, last_used_at desc;
按last_used_at desc
排序也应该有效。但是,我认为明确处理NULL
值更清楚。
答案 1 :(得分:0)
我认为你可以从这样的事情开始。请下次发布样本数据,预期结果等。
SELECT A.PRODUCT_ID
, A.PRODUCT_NAME
, B.USER_ID
, B.LAST_USED_AT
FROM PRODUCTS A
LEFT JOIN PRODUCTS_LAST_USAGE B ON A.PRODUCT_ID = B.PRODUCT_ID
ORDER BY B.USER_ID, B.LAST_USED_AT DESC, A.PRODUCT_NAME;