我有以下表格:
user
user_id | name
1 W
2 x
3 Y
4 Z
author
auth_id | name
1 M
2 N
3 O
4 P
preferred_author
user_id | auth_id
1 2
1 3
1 4
2 1
book
book_id | title
1 Hello world 01
2 Hello world 02
3 Hello world 03
4 Hello world 04
5 Hello world
book_author
book_id | auth_id
1 2
2 3
3 4
4 1
现在当一个用户 W
搜索名为 hello world
我想显示的书籍是由用户的首选作者,首先,然后根据相关性的其他结果。我尝试的是 selecting all the ids of preferred authors and saved in a php array
```
PHP:
Say, $p_auth_ids = (2, 3, 4);
然后我运行了一个查询来搜索:
$query = "SELECT b.book_id, b.title,
MATCH(b.title) AGAINST("hello world" IN BOOLEAN MODE) AS relevance
FROM book AS b
INNER JOIN book_author AS ba ON b.book_id=ba.book_id
WHERE ba.auth_id IN ('".$p_auth_ids."')
AND
MATCH(b.title) AGAINST("hello world" IN BOOLEAN MODE)
ORDER BY relevance DESC"
输出应为:
book_id | title
1 Hello world 01
2 Hello world 02
3 Hello world 03
5 Hello world
4 Hello world 04
不起作用。那么我想要的是什么呢?谢谢。
1条答案
按热度按时间k4ymrczo1#
我想这个问题会给你你想要的。它加入了
book
餐桌preferred_author
(通过book_author
)然后去公园user
table。在JOIN
至user
,我们添加user.name = 'W'
条件,以便只有该用户的首选作者具有非空值user_id
在结果集中。然后我们可以在user_id IS NULL
(对于用户首选作者的书籍,其值为0,否则为1)后跟relevance DESC
:输出(请注意,您所有的标题都太相似,无法生成不同的相关性值,因此它不能完全按照您指定的排序,但是如果您在演示中更改标题,您将看到它在工作):
在dbfiddle上演示