Php 加入后使用MySQL按细节选择

Php 加入后使用MySQL按细节选择,php,mysql,sql,database,pdo,Php,Mysql,Sql,Database,Pdo,首先,我将介绍我正在努力实现的目标以及我是如何做到的 我有三个表,Posts,Details,和Posts\u Details Posts是我保存基本post数据的表,Details是保存细节实例的表,其中包含关于细节标题的信息、可能的值和一些信息(如果输入需要细节),显示标志等。Posts\u Details是表示M->N关系的实体,该关系保留一个细节值,因此它有三个属性,post和Details的id对以及一个值 我试图设置的是一个搜索功能 搜索的第一部分很简单,我使用“%”?%%之类的Po

首先,我将介绍我正在努力实现的目标以及我是如何做到的

我有三个表,
Posts
Details
,和
Posts\u Details

Posts
是我保存基本post数据的表,
Details
是保存细节实例的表,其中包含关于细节标题的信息、可能的值和一些信息(如果输入需要细节),显示标志等。
Posts\u Details
是表示
M->N
关系的实体,该关系保留一个细节值,因此它有三个属性,post和Details的id对以及一个值

我试图设置的是一个搜索功能

搜索的第一部分很简单,我使用“%”?%%之类的
Posts.title
,客户端对它的工作方式很满意,我知道它的局限性,但这是目前最基本的搜索功能。下一个特点是什么给我带来了麻烦,因为我觉得我不知道如何正确地建立关系,而且我已经落后于计划停止工作并阅读关系

我需要创建一个类似“高级搜索”的功能,用户不仅可以选择类别和标题关键字,还可以使用下拉输入匹配详细信息。我正在使用PHP和PDO,但我认为这在这里不太重要,因为我的问题与SQL更相关

我是如何解决这个问题的——我正在解析get数据并将其收集到一个关联数组中,details id作为键,值作为值,因此我想迭代数组并将规则附加到SQL字符串的WHERE部分。在解析了mashed列之后,我用这种方法得到了一些结果,但感觉不太对劲,我觉得我只是在做一些修改


是否有一种“更正确”的方法来实现这种按细节搜索,在这三个表合并后,我将制定一个规则,用细节列表中的值来选择帖子?

您可以使用子选择

SELECT p.*, d.* FROM ... -- Existing Join
WHERE ... -- Existing Criteria
OR p.id IN (SELECT posts_id FROM Posts_Details WHERE detail like ?)

我想这篇文章很容易被否决,但是如果你告诉我是什么让这成为一个愚蠢的问题,以及如何改进它,或者我做错了什么,我将不胜感激。你需要提供更多关于表结构的细节。还有,什么是“细节”?您听起来像是一个属性(如“蓝色”或“大小34”),因为您是通过id而不是内容来引用它们的,但更多。。。细节。。。可能会有帮助。但我确实解释了结构-细节是保留细节实例,包括细节标题的信息、可能的值和一些信息(如果输入需要细节)、显示标志等。我只是省略了上下文和内容,因为我认为它与主题无关,而且外观更好,谢谢,当然可以。只是一个小提示——如果您的客户可以接受“?%”而不是“?%”,那么您通常可以从根本上提高性能。