我有一个包含以下信息的数据库:
leavetype[0].payroll_leave_hours_cap
此表显示“Tom”和“James”阅读的书籍。
这些是我需要的要求:
显示未阅读的下一本书。 (例如,汤姆的'3'和詹姆斯的'1')
跳过书'1','10'和'15',因为这些不再可用。 (所以在James的案例中,下一本书将是'3')
如果不能连续播放,任何未阅读的随机图书都可以。
这就是我所做的:
--------------
id | Book | Names
1 | 1 | Tom
2 | 8 | James
3 | 10 | Tom
4 | 2 | Tom
5 | 17 | James
6 | 2 | James
7 | 9 | James
8 | 7 | Tom
9 | 8 | Tom
这是我有多远。所有帮助赞赏。感谢
答案 0 :(得分:2)
在我的脑海中,日历表方法可能是在MySQL中完全解决此问题的一个很好的解决方案。首先定义一个序列表,其中包含从1到最高书ID的值(我称之为seq_table
)。然后,为了找到给定用户未读取的最低书,一个简单的左连接将起到作用:
SELECT MIN(t1.Book) AS next_book
FROM seq_table t1
LEFT JOIN books t2
ON t1.Book = t2.Book AND
t2.Names = 'Tom'
WHERE
t2.Book IS NULL;
如果您想要选择Tom不读的随机书,那么我们可以使用以下查询:
SELECT t1.Book AS next_book
FROM seq_table t1
LEFT JOIN books t2
ON t1.Book = t2.Book AND
t2.Names = 'Tom'
WHERE
t2.Book IS NULL
ORDER BY RAND()
LIMIT 1;
答案 1 :(得分:0)
您需要另一张表来存储可用的书籍,例如books
表
---------------------------------------------
id | Book_Title | Available
---------------------------------------------
1 | One million promises | no
2 | Two towers | yes
3 | Three musketeers | yes
4 | 4th Avenue Cafe | yes
5 | Famous Five | yes
6 | Six million dollar man | yes
7 | Seven Stars | yes
8 | Eighth Paladin | yes
9 | Ninth Heaven | yes
假设您的阅读书籍表名为read_books
,您可以通过此查询获取Tom阅读的下一本书:
select min(id) from books where Available='yes' and id not in (select book from read_books where names = 'Tom')