我有以下表格:
用户
id | Name | ...
1 | John |
2 | Richard |
3 | Michael |图书
id | title | author| ...
1 | ABC | Z |
2 | ABM | X |
3 | IJK | W |
4 | MNO | Z |
5 | ABQ | Y |fav_book
user_id | book_id
1 | 5 |
1 | 4 |
3 | 1 |
3 | 2 |
3 | 5 | 现在,如果John搜索一本名为Ab的书,我想先在搜索结果中显示他最喜欢的一本书,然后是其他的。
因此,John搜索Ab的输出应该是
id | title
5 | ABQ
1 | ABC
2 | ABM我试过:
SELECT * FROM (
(SELECT id, title
FROM book
WHERE id IN(5,4) AND title LIKE 'Ab%')
UNION ALL
(SELECT id, title
FROM book )
) tbl ORDER BY ???因此,我如何操作我的order by子句以获得所需的结果。谢谢。
发布于 2019-03-02 12:17:12
我想您不想为每个用户硬编码fav书籍。
如果您想要user_id = 1的结果并搜索以'Ab'开头的title
select
id, title
from book
where title like 'Ab%'
order by (
case when id in (select book_id from fav_book where user_id = 1) then 0
else 1 end
), title见演示
https://stackoverflow.com/questions/54958280
复制相似问题