有什么方法可以使用php + mysql进行多个条件搜索吗?
我在网站上看到了它,我想为自己做类似的事情。
所以我有两个桌子
table1-'Books'(书名,作者,BookID)
table2-“说明”(Bookid,说明)
每本书可以有用户想要的描述。
表“书”
标题作者BookID
噩梦(…)汤姆·B·阿
很棒(…)Jim C. AAB
Ghost Night(…)艾米·D·AAC
保姆(...)基蒂D. AAD
你好,世界(…)皮特·A·埃
汉尼拔(...)黄油H. AAF
和
表“说明”
图书ID说明相关性
AAA惊悚片0
AAA犯罪0
AAA侦探0
AAB地理0
AAB Travel 0
AAC惊悚片0
AAD喜剧0
AAD家庭0
AAE编程0
AAE计算机科学0
AAF惊悚片0
AAF犯罪0
我已经制作了插入数据部分,实际上对我来说并不难,但是当涉及到搜索部分时,事情变得比我想象的要复杂得多。
我将使用的工作表与“目标”网站使用的模型完全相同,在这里我使用()代表html的选择形式,使用[]代表普通的输入形式
[]
(AND / OR)[]
(AND / OR)[]
(AND / OR)[]
,用户可以填写1-4个条件,例如“惊悚片”(AND)和“犯罪”,MySQL会找到适合这些描述的所有描述,在我的情况下,将是以下信息:
AAA惊悚片0
AAA犯罪0
AAC惊悚片0
AAF惊悚片0
AAF犯罪0
下一步,计算机应对找到的ID进行分类,并将结果排序为:
AAA 2条标准已通过验证
AAF符合2条标准
已验证AAC 1条标准
然后,我希望它在浏览器中回显/打印这些信息:
1。噩梦(...)汤姆·B·AAA
描述:惊悚片,犯罪
2。汉尼拔(...)黄油H. AAF
描述:惊悚片,犯罪
3。幽灵之夜(…)艾米D. AAC
描述:惊悚片
我的主要问题是分类和排序部分,我不知道如何在SQL中将代码插入另一个代码中。
我尝试了GROUP BY(第一次),但没有成功。
实际上,经过几天的失败尝试,我开始考虑我的数据结构是否是真正的问题...
感谢您的帮助和关注。
答案 0 :(得分:1)
使用分组依据是一个好主意,但您可能想添加一些类别以帮助您进行排序。
例如:
模式(MySQL v5.7)
CREATE TABLE book (
`title` VARCHAR(10),
`id` VARCHAR(3) PRIMARY KEY
);
INSERT INTO book
(`title`, `id`)
VALUES
('Nightmare', 'AAA'),
('Wonderful.', 'AAB'),
('GhostNight', 'AAC'),
('Babysitter', 'AAD'),
('Helloworld', 'AAE'),
('Hannibal', 'AAF');
CREATE TABLE cat (
`BookID` VARCHAR(3),
`Description` VARCHAR(50),
`Relevance` VARCHAR(7),
FOREIGN KEY (`BookID`) REFERENCES book (id)
);
INSERT INTO cat
(`BookID`, `Description`, `Relevance`)
VALUES
('AAA', 'Thriller', '0'),
('AAA', 'Crime', '0'),
('AAA', 'Detective', '0'),
('AAB', 'Geography', '0'),
('AAB', 'Travel', '0'),
('AAC', 'Thriller', '0'),
('AAD', 'Comedy', '0'),
('AAD', 'Family', '0'),
('AAE', 'Programming', '0'),
('AAE', 'Computer Science', '0'),
('AAF', 'Thriller', '0'),
('AAF', 'Crime', '0');
查询#1
SELECT b.title, COUNT(c.description) AS cnt
FROM book b
LEFT JOIN cat c
ON b.id = c.BookID
WHERE c.Description IN ('Thriller', 'Crime')
GROUP BY b.title
ORDER BY cnt DESC;
输出
| title | cnt |
| ---------- | --- |
| Nightmare | 2 |
| Hannibal | 2 |
| GhostNight | 1 |