我正在尝试执行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';
答案 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%'
在通过在关键字位置替换关键字来应用此查询时,会得到此结果。
我在这里匹配关键字“第一条评论”