Php mysql连接多个子句

Php mysql连接多个子句,php,mysql,Php,Mysql,我有一个搜索功能,用户提供两个输入:$studies和$elements。我需要搜索数据库,在本例中有两个表:研究和研究元素。我想连接这两个表,其中搜索函数找到了研究和元素的匹配项。我的MYSQL查询应该是什么样子?现在我有这个: $studies = mysqli_real_escape_string($conn, $_POST['search-studies']); $elements = mysqli_real_escape_string($conn, $_POST['search-ele

我有一个搜索功能,用户提供两个输入:$studies和$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
传递,“transaction costs”作为
$elements
传递,它给出的结果与我传递“john”和“bullshit”时的结果完全相同,即使“bullshit”不在P.first_元素、P.second_元素或P.third_元素中。我曾尝试在不同的位置添加一些括号,但没有效果

我需要构造一个接受这两个输入的查询,检查它们是否可以在单个表中联接,然后检索该表

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

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

使用括号
用于S table子句。类似于P table子句,请参阅PHP中的预处理和绑定查询,并注意“…”不能使用索引。问题是运算符优先级,即应用
的顺序。当您编写
WHERE Condition1和Condition2或Condition3
时,您将得到在匹配的
Condition1和Condition2
以及所有匹配的
Condition3
行中。在您的情况下,您希望通过添加括号来强制执行不同的分组:
WHERE Condition1和(Condition2或Condition3)
。换句话说
WHERE StudyCondition和(…AuthorCondition1或AuthorCondition2)和(元素条件1或元素条件2或元素条件3)
。此查询只是合并两个表中的所有行。如果将LEFT JOIN更改为JOIN,我将接受它作为answer@Vava这就是为什么这个问题应该有示例数据、当前结果和期望结果。如果fa06没有击败我,我会给你同样的答案,我无法从你的评论中找出问题的症结所在它。@Vava,同意Golez Trol,内部连接有什么问题,它会给你所有的行,因为我们不知道你的场景,根据假设很难回答。无论你是否将其作为答案,这取决于你兄弟:)@ha ha ha ha,@JuanCarlosOropeza好,正如你说的:),顺便说一句,Golez Trol已经在我的答案中更新了它