我一直在进行搜索,但是似乎无法获得搜索功能来对结果进行排序。用户应该能够检查主题的多个复选框,任务是列出所有包含这些主题的书籍,并根据匹配次数对它们进行排名。这是我查询得到的结果,不会出错SELECT b.ISBN, b.TITLE FROM BOOKS b, BOOK_SUBJECT bs WHERE bs.ISBN = b.ISBN AND bs.SUBJECT_ID = 47 OR bs.SUBJECT_ID=48 ORDER BY
我的表的结构如下:
12345678A 47 123456FF88 47 12345678A 48 123456FF88 49 123456FF55 47 123456FF55 48 123456FF55 49 123456FF11 48 123456FF11 49
12345678A Web Design 12 123456FF88 Getting JSON parse codec error testing on new machine 88.42 123456FF55 Second Test 88 123456FF11 Image stitching distorted wrap with multiple images 7
47 Computer Science 48 Maths 49 Physics 81 Cooking 因此,举例来说,如果我搜索“计算机科学”和“物理”,则应返回所有匹配顺序为“先”和“后”的所有书籍。非常感谢,这是Stackoverflow的新手
问题来源于stack overflow
首先,学习使用正确的JOIN语法。
其次,查询的问题是缺少括号。。。但是正确的JOIN语法实际上可以解决该问题。我更喜欢IN:
SELECT b.ISBN, b.TITLE FROM BOOKS b JOIN BOOK_SUBJECT bs ON bs.ISBN = b.ISBN WHERE bs.SUBJECT_ID IN (47, 48); 该查询至少应在合理的时间内返回。但是您可能想要同时具有两个主题而不是两个主题的书籍。如果是这样,请使用聚合。假设一本书不重复这些主题:
SELECT b.ISBN, b.TITLE FROM BOOKS b JOIN BOOK_SUBJECT bs ON bs.ISBN = b.ISBN WHERE bs.SUBJECT_ID IN (47, 48) GROUP BY b.ISBN, b.TITLE HAVING COUNT(*) = 2; 或者,通过匹配对它们进行排名:
SELECT b.ISBN, b.TITLE FROM BOOKS b JOIN BOOK_SUBJECT bs ON bs.ISBN = b.ISBN WHERE bs.SUBJECT_ID IN (47, 48) GROUP BY b.ISBN, b.TITLE ORDER BY COUNT(*) DESC;
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。