查询从一个表中获取所有itms,但是由另一个没有所有项的表排序

时间:2017-07-11 12:21:07

标签: mysql ruby-on-rails

我有一个表products,其中 id 的产品和名称

第二个表格为products_last_usage,我保留 product_id user_id last_used_at

每当用户点击某个产品时,我都会更新字段 last_used_at

现在,我需要一个查询来列出所有产品,然后先按last_used_at排序,然后按产品名称排序。它必须 PER USER 。即每个用户都有自己的表格顺序。

但我需要所有产品,即使第二张表中没有它们的记录。

怎么做?

您可以帮我查询rails查询或mysql查询。

2 个答案:

答案 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;