Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何编辑我的查询以生成正确的IF/Join语句?_Php_Mysql_Sql - Fatal编程技术网

Php 如何编辑我的查询以生成正确的IF/Join语句?

Php 如何编辑我的查询以生成正确的IF/Join语句?,php,mysql,sql,Php,Mysql,Sql,我的结构解释如下: 我有两个表,alerts\u conditions和alerts\u list 我想做的是一个查询,它将在两个表中查找,但有时信息将仅从一个表中收集,有时信息将从两个表中收集 我的查询查看是否在警报\u条件和/或警报\u列表上找到了id id始终位于警报列表表中。 因此,如果在alerts\u conditions上找到id,这意味着它在alerts\u列表中也有一行 但是,如前所述,在某些情况下,id只能在警报列表中找到 目前,如果仅在alerts\u列表中找到id,我会得

我的结构解释如下: 我有两个表,
alerts\u conditions
alerts\u list

我想做的是一个查询,它将在两个表中查找,但有时信息将仅从一个表中收集,有时信息将从两个表中收集

我的查询查看是否在
警报\u条件
和/或
警报\u列表
上找到了
id

id
始终位于
警报列表
表中。 因此,如果在
alerts\u conditions
上找到
id
,这意味着它在
alerts\u列表中也有一行

但是,如前所述,在某些情况下,
id
只能在
警报列表中找到

目前,如果仅在
alerts\u列表中找到
id
,我会得到混合数据。 我的问题是

  • 如何更改查询,以便在
    警报\u列表
    上仅找到id时,
    警报\u条件
    的列显示为空
  • id
    两个表中找到以从两个表中获取数据时
  • 在这种情况下,数字50是
    id

    SELECT * 
    FROM   alerts_conditions, 
           alerts_list 
    WHERE  (alerts_conditions.alerts_conditions_alert = 50 OR alerts_list.alerts_id=50)
           AND alerts_conditions.company_id = 1 
    LIMIT  1 
    
    注意

    company\u id
    与问题无关,必须排除在任何条款之外

    SELECT al.*, ac.* 
    FROM   alerts_list al
    LEFT JOIN alerts_conditions ac ON (al.alerts_id=ac.alerts_conditions_alert)
    WHERE  al.alerts_id=50
           AND (
             ac.alerts_conditions_alert is NULL 
             OR 
             ac.company_id = 1
           )
    LIMIT  1 
    
    如果
    警报条件中没有其他信息,则其字段将等于NULL,否则将检查公司id是否匹配


    如果
    警报条件中没有其他信息,则其字段将等于NULL,否则将检查公司id是否匹配。

    正确的写入方法是在
    on
    子句中将条件置于
    警报条件中

    SELECT ac.*, al.*
    FROM alerts_list al LEFT JOIN
         alerts_conditions ac
         ON ac.alerts_conditions_alert = al.alerts_id AND
            ac.company_id = 1 
    WHERE al.alerts_id = 50
    LIMIT 1 ;
    

    正确的编写方法是在
    on
    子句中将条件置于
    alerts\u conditions

    SELECT ac.*, al.*
    FROM alerts_list al LEFT JOIN
         alerts_conditions ac
         ON ac.alerts_conditions_alert = al.alerts_id AND
            ac.company_id = 1 
    WHERE al.alerts_id = 50
    LIMIT 1 ;
    

    您好,我得到这个:SQL错误(1064):您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,了解使用第3I行“right JOIN alerts\u conditions ac ON(al.alerts\u id=ac.alerts\u conditions\u alert)WH”附近的正确语法。我已通过添加更清晰的描述更新了我的问题。目前,如果该id仅在警报列表中找到,我会得到混合数据。我的问题是1。如何更改查询,以便在“警报”列表中仅找到id时,警报条件的列显示为空?2.当在两个表中都找到id以从两个表中获取数据时,您是否尝试了我的查询?我相信它回答了最新的问题,我已经测试了你的答案。如果
    id
    在两个表上,则它可以工作。否则,如果它仅在
    警报列表上
    我得到临时输出更新,请再次检查,我得到:SQL错误(1064):您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,了解使用第3I行“right JOIN alerts\u conditions ac ON(al.alerts\u id=ac.alerts\u conditions\u alert)WH”附近的正确语法。我已通过添加更清晰的描述更新了我的问题。目前,如果该id仅在警报列表中找到,我会得到混合数据。我的问题是1。如何更改查询,以便在“警报”列表中仅找到id时,警报条件的列显示为空?2.当在两个表中都找到id以从两个表中获取数据时,您是否尝试了我的查询?我相信它回答了最新的问题,我已经测试了你的答案。如果
    id
    在两个表上,则它可以工作。否则,如果它仅在
    警报列表上
    我得到临时输出更新,请再次检查