mysql连接多子句

z9ju0rcb  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(262)

我有一个搜索功能,用户提供2个输入:$studies和$elements。我需要搜索数据库,这里有两个表:studies和studies\u elements。我想把这两个表连接起来,搜索函数在这两个表中找到了匹配的研究和元素。我的mysql查询应该是什么样子的?现在我有这个:

$studies = mysqli_real_escape_string($conn, $_POST['search-studies']);
$elements = mysqli_real_escape_string($conn, $_POST['search-elements']);

$sql = SELECT S.*, P.* 
       FROM studies S 
           LEFT JOIN studies_elements P 
               ON S.study_id = P.study_id 
               AND S.author LIKE '%$studies%' OR S.study_name LIKE '%$studies%' OR s.abstract LIKE '%$studies%'
               AND P.first_element LIKE '%$elements%' OR P.second_element LIKE '%$elements%' OR P.third_element LIKE '%$elements%'
       ORDER BY S.study_id

这段代码应该生成合并表,它确实生成了。但当 $elements 在数据库中找不到。例如,如果我将值'john'传递为 $studies 以及“交易成本” $elements 它给出的结果与我传递'john'和'bullshit'时完全相同,即使'bullshit'不在p.first\u元素、p.second\u元素或p.third\u元素中。我试过在不同的位置加上一些括号,但没有用。
我需要构造一个接受这两个输入的查询,检查它们是否可以在单个表中联接,然后检索该表。

6qftjkof

6qftjkof1#

在缺少或条件时使用括号(),这就是为什么它会给出所有结果的组合

SELECT S.*, P.* 
       FROM studies S 
           JOIN studies_elements P 
               ON S.study_id = P.study_id 
               AND (S.author LIKE '%$studies%' OR S.study_name LIKE '%$studies%' OR s.abstract LIKE '%$studies%')
               AND (P.first_element LIKE '%$elements%' OR P.second_element LIKE '%$elements%' OR P.third_element LIKE '%$elements%')
       ORDER BY S.study_id

相关问题