我正在构建一个搜索页面,其中表单将变量传递给 SQL 查询。如果我输入任何搜索参数,我会得到我想要的结果,除非我将作者或主题搜索留空,否则如果有多个作者和/或与结果相关联的主题,我将得到多个结果。我的大部分记录都有多个作者或多个主题。
基本问题是,如果有 2 个作者和 3 个相关主题的记录,那么我会得到 6 个结果。
我要达到的目标:我正在尝试修改查询,以便我只收到一条记录(record_ID 是唯一的),即使有多个作者或多个主题。
我遇到问题的查询中的 2 JOINS 是拉作者和主题。例如,为了获取作者,我使用这个连接(主题 JOIN 几乎相同),变量 $fauthor 是从 php 传入的:
SELECT la.author, la.author_ID, ra.record_ID
FROM lib_author AS la
JOIN record_author AS ra ON la.author_ID = ra.author_ID
JOIN lib_record AS lr ON ra.record_ID = lr.record_ID
WHERE la.author LIKE '%$fauthor%'
关联的表是 lib_author [author_ID, author]、lib_record [record_ID, ...] 和 record_author [record_ID, author_ID]
这是完整的查询:
select a.record_ID, a.year, n.title, y.author, y.author_ID, j.journal, pox.publisher, lox.language, a.volume, a.issue, a.pages, a.abstract, s.subject
FROM lib_record AS a
JOIN lib_title as n on n.title_ID = a.title_ID
JOIN (SELECT la.author, la.author_ID, ra.record_ID
FROM lib_author AS la
JOIN record_author AS ra ON la.author_ID = ra.author_ID
JOIN lib_record AS lr ON ra.record_ID = lr.record_ID
WHERE la.author LIKE '%$fauthor%') AS y
JOIN (SELECT ls.subject, ls.subject_ID, rs.record_ID
FROM lib_subject AS ls
JOIN record_subject AS rs ON ls.subject_ID = rs.subject_ID
JOIN lib_record AS lr ON rs.record_ID = lr.record_ID
WHERE ls.subject LIKE '%$fsubject%') AS s
JOIN lib_journal AS j on j.journal_ID = a.journal_ID
JOIN lib_publisher pox ON a.publisher_ID = pox.publisher_ID
JOIN lib_language lox ON a.language_ID = lox.language_ID
WHERE y.record_ID = a.record_ID
AND s.record_ID = a.record_ID
AND n.title LIKE '%$ftitle%'
AND j.journal LIKE '%$fjournal%'
我希望有人有一些见识。谢谢