sql搜索查询

kpbpu008  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(283)

我正在尝试进行sql搜索查询,以仅返回与我的搜索关键字匹配的订单。问题是,我还需要在每个评论体中搜索每个顺序,如果在该评论中找到结果,则应选择该评论的顺序。这些表以简化的方式显示如下:

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

所以如果我搜索“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';
q3qa4bjr

q3qa4bjr1#

根据你的概念,我在phpmyadmin中创建了3个演示表,这里有描述。
1.订单有列(id,title)。
2.comment\u关系有列(id、comment\u id、target\u id、type)。
3.注解有列(id,body)。
这是一个sql查询,用于从comments表中的order by 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%'

通过在关键字处替换关键字来应用此查询时,您将得到此结果。

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

mkshixfv

mkshixfv2#

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

'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';

相关问题