关系表中的SQL搜索查询

时间:2018-08-02 11:51:51

标签: php mysql sql search pdo

我正在尝试执行sql搜索查询,以仅返回与我的搜索关键字匹配的ORDERS。问题是我还需要在每个评论正文中搜索每个顺序,如果在该评论中找到了结果,则应该选择该评论的顺序。表格以简化的方式看起来像这样:

ORDERS:

ID = 95
title = first order


COMMENT RELATIONS:
id = 1241
comment_id = 500
target_id = 95
type = order

COMMENTS: 
id = 500
body = this is the first comment

因此,如果我搜索“第一条评论”,则应选择ID为95的订单。

我当前的尝试似乎是选择更多的顺序,然后再选择其评论和关系?这就是我目前的尝试。

$query = 'SELECT DISTINCT *
FROM orders as o
LEFT JOIN comment_relations as cr ON o.id = target_id
LEFT JOIN comments as c ON cr.comment_id = c.id
WHERE o.id LIKE :keyword OR o.title LIKE :keyword OR c.body LIKE :keyword';

2 个答案:

答案 0 :(得分:1)

不确定使用的是哪个数据库,但是在大多数数据库中,可以使用表别名,后跟*以仅选择一个表。

'SELECT DISTINCT o.*
FROM orders as o
LEFT OUTER JOIN comment_relations as cr ON o.id = target_id
LEFT OUTER JOIN comments as c ON cr.comment_id = c.id
WHERE o.id LIKE :keyword OR o.title LIKE :keyword OR c.body LIKE :keyword';

答案 1 :(得分:0)

根据您的概念,我在phpmyadmin中创建了3个演示表。

1.orders有列(id,title)。

2.comment_relations具有列(id,comment_id,target_id,类型)。

3.comments有列(id,body)。

这是SQL查询,用于通过注释表中的match关键字从订单中提取记录。

select DISTINCT o.* from orders o LEFT JOIN comment_relations cr ON o.id=cr.target_id LEFT JOIN comments c ON c.id=cr.comment_id where body LIKE '%keyword%'

在通过在关键字位置替换关键字来应用此查询时,会得到此结果。

Result page

我在这里匹配关键字“第一条评论”