首先,我将介绍我正在尝试实现的目标以及我是如何实现的。
我有三个表,Posts
,Details
和Posts_Details
。
Posts
是我保留基本帖子数据的表,Details
保留详细信息实例,有关详细信息标题的信息,可能的值和一些信息(如果需要详细信息)输入,显示标志等。Posts_Details
是表示M->N
关系的实体,它保留一个细节值,因此它有三个属性,post和detail的id对以及一个值。 / p>
我正在尝试设置的是搜索功能。
搜索的第一部分很简单,我使用Posts.title LIKE '%?%'
并且客户端对它的运行方式感到满意,我知道它的局限性,但这是现在基本的搜索功能。下一个特征是给我带来麻烦的原因,因为我不觉得我知道如何正确地建立关系,而且我已经落后于停止工作和阅读关系的时间表。
我需要创建一个像“高级搜索”这样的功能,用户不仅可以选择类别和标题关键字,还可以使用下拉输入匹配详细信息。我正在使用PHP和PDO,但我不认为这里的相关性太大,因为我的问题与SQL有关。
我是如何解决这个问题的 - 我正在解析获取数据并将其收集在关联数组中,其中详细信息ID为键,值为值,因此我想迭代数组并在WHERE中附加规则SQL字符串的一部分。在解析了捣碎的列之后,我用这种方法获得了一些结果,但感觉不对,我觉得我只是做了一个黑客攻击。
是否有一种“更严格”的方式来实现这种搜索细节,我会制定一个规则,在三个表加入后从详细列表中选择包含值的帖子?
答案 0 :(得分:0)
您可以使用子选择。
SELECT p.*, d.* FROM ... -- Existing Join
WHERE ... -- Existing Criteria
OR p.id IN (SELECT posts_id FROM Posts_Details WHERE detail like ?)