![](/img/trans.png)
[英]Select points within polygon mysql - No errors, no results-(What is wrong?)
[英]Show matched results with WHERE IN() first then other results- MYSQL
我有以下表格:
用戶
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
子句以獲得所需的結果。 謝謝。
我認為您只想order by
以下方式調整order by
:
SELECT id, title
FROM book
WHERE title LIKE 'Ab%'
ORDER BY (id IN (5, 4)) DESC -- put these first
MySQL在數值上下文中將布爾值視為整數。 “ true”的值為1,“ false”的值為0; 這就是將匹配ID放在首位的原因。
您可以添加另一個ORDER BY
鍵來對每個子集(收藏夾和非收藏夾)中的值進行排序:
ORDER BY (id IN (5, 4)) DESC, -- put these first
id
我想您不想對每個用戶的收藏夾進行硬編碼。
如果您希望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
觀看演示
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.