我搜索了很多,问我的DBA / Java开发人员朋友,但没有找到满意的答案。
这是我的表(Showing only 3 columns)
TBL_工作
Job_ID(auto increment PK|Job_posting_date| city|Already_applied_flag
------------------------------------------------------------------------
1 | 1/1/2001 | Tezpur |
2 | 1/1/2010 | Jakarta| X(already applied)
3 | 1/1/2003 | Paris|
----Thousands of rows...
我的java程序每天从Jobs表中选择50个作业,然后将它们标记为已经应用,以便它不会再次应用于相同的作业。
问题是,该表不是根据job_posting_date排序的,但我的程序必须首先选择最新作业。 (当然,当我们继续运行它时,它将开始应用于OLD作业)
所以我的问题是: 我如何每天选择50个最新工作? 我正在考虑的解决方案
1) SELECT a row for MAX( Job_posting_date )
apply to the job. Mark it as applied
Repeat 50 times
----Extremely inefficient
2) Select ALL the Rows:
Order by (Job_posting_date)
Pick the top 50
3) Somehow reorder the database table ? ( JOB_ID is a foreign key in other tables, so changing it won't be easy)
这似乎是一个常见的问题。我在这里错过了什么? 感谢
答案 0 :(得分:0)
通常,关系数据库表中的行没有顺序(数据库细节除外)。订购结果在JPQL中完成,并通过Query.setMaxResults限制结果数量。例如:
String jpql = "SELECT j FROM Jobs ORDER BY jobPostingDate";
Query q = em.createQuery(jpql);
q.setMaxResults(50);