在加入后通过MySQL的详细信息选择

时间:2017-03-30 13:52:26

标签: php mysql sql database pdo

首先,我将介绍我正在尝试实现的目标以及我是如何实现的。

我有三个表,PostsDetailsPosts_Details

Posts是我保留基本帖子数据的表,Details保留详细信息实例,有关详细信息标题的信息,可能的值和一些信息(如果需要详细信息)输入,显示标志等。Posts_Details是表示M->N关系的实体,它保留一个细节值,因此它有三个属性,post和detail的id对以及一个值。 / p>

我正在尝试设置的是搜索功能。

搜索的第一部分很简单,我使用Posts.title LIKE '%?%'并且客户端对它的运行方式感到满意,我知道它的局限性,但这是现在基本的搜索功能。下一个特征是给我带来麻烦的原因,因为我不觉得我知道如何正确地建立关系,而且我已经落后于停止工作和阅读关系的时间表。

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

我是如何解决这个问题的 - 我正在解析获取数据并将其收集在关联数组中,其中详细信息ID为键,值为值,因此我想迭代数组并在WHERE中附加规则SQL字符串的一部分。在解析了捣碎的列之后,我用这种方法获得了一些结果,但感觉不对,我觉得我只是做了一个黑客攻击。

是否有一种“更严格”的方式来实现这种搜索细节,我会制定一个规则,在三个表加入后从详细列表中选择包含值的帖子?

1 个答案:

答案 0 :(得分:0)

您可以使用子选择。

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