我有一个搜索功能,用户可以提供2个输入:$ studies和$ elements。我需要搜索数据库,在这种情况下,数据库有两个表:Studies和Studies_elements。我想加入这两个表,其中搜索功能找到了研究和元素的匹配项。我的MYSQL查询应该如何显示?现在我有这个:
let vc = ///
self.navigationController?.pushViewController(vc, animated: true)
//
self.navigationController?.popViewController(animated: true)
该代码应产生合并表,并且可以。但是,在数据库中找不到$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
时,也会产生相同的结果。例如,如果我将值'john'传递为$elements
,将'交易成本'传递为$studies
,则即使'bullshit'传递的结果与我传递'john'和'bullshit'时的结果完全相同'不在P.first_element,P.second_element或P.third_element中。我尝试在各个位置添加一些括号,但无济于事。
我需要构造一个接受这两个输入的查询,检查是否可以将它们合并到一个表中,然后检索该表。
答案 0 :(得分:1)
在错过时使用括号()或条件,这就是为什么它为您提供结果的所有组合
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