测试查询中是否存在MySQL行

时间:2016-09-01 18:32:08

标签: php mysql

我正在尝试创建一个SQL查询,将两个数据库相互比较,但如果尚未在其他地方创建其中一个数据库行,也不会导致查询失败。

这是我到目前为止所获得的(有点伪代码)

$Query="SELECT * FROM campaigns,statistics WHERE statistics.dataDate = '$todaysDate' OR statistics.dataDate DOES NOT EXIST AND where campaigns.campaignName = 'example'";

"不存在"部分是我需要帮助的地方,我该如何创建一个查询,如果尚未创建行,则查询可以继续进行更多检查?

非常感谢任何建议!我已经浏览了一下,无法找到一个解决方案,检查该行是否在查询内部 (构建查询时需要该行)进一步了)

再次感谢,

修改

为了澄清任何混淆,这是第二个例子:

`$Query="SELECT * FROM campaigns,statistics WHERE campaigns.campaignName = '$randomVar' AND (campaigns.budget > statistics.budget OR statistics.budget DOES NOT EXIST )";`

我创建了这个示例,显示如果预算不存在(我们会将其视为0)并仍然返回结果,因为预算字段尚未在平台的其他位置创建。如果我在没有这个额外的情况下运行查询" OR"它看起来像这样:

    `$Query="SELECT * FROM campaigns,statistics WHERE campaigns.campaignName = '$randomVar' AND (campaigns.budget > statistics.budget)";`

问题在于,到目前为止,在我的平台中,并不总是在运行此查询之前创建statistics.budget,因此如果它没有一行我很高兴查询要处理它为0

谢谢!

3 个答案:

答案 0 :(得分:0)

我从您的要求中了解到,您要检查查询是否返回结果。如果你问的是这是检查它是否为空或者是否从查询中返回结果的方法。

要检查Query是否返回行,您可以使用Empty()函数。

     $Query="SELECT * FROM campaigns,statistics WHERE statistics.dataDate = '$todaysDate' OR statistics.dataDate DOES NOT EXIST AND where campaigns.campaignName = 'example'";

 if(empty($Query))
    {
      // You can create any Query here , so when the $Query is empty and no data were returned Anything here is going to execute , you can create fields or anything you want . 
    }

  else 
    {
       // This is the will execute when there is returned data in the $Query , Its optional this .
   }

答案 1 :(得分:0)

首先,您的ORAND代码混乱不堪。你应该放一些()来使它干净。你的两个数据库之间也没有连接,所以我做了一个。 试试这个

$Query="SELECT * FROM campaigns LEFT OUTER JOIN statistics WHERE
(statistics.dataDate = '$todaysDate' OR statistics.dataDate IS NULL ) AND 
campaigns.campaignName = 'example' AND 
campaigns.campaignName=statistics.campaignName";

答案 2 :(得分:0)

根据此示例,您提供:

SELECT *
FROM campaigns,statistics
WHERE
    campaigns.campaignName = '$randomVar'
    AND (campaigns.budget > statistics.budget
         OR statistics.budget DOES NOT EXIST)

首先,明确定义您的JOIN

SELECT *
FROM
    campaigns
    LEFT OUTER JOIN statistics
        ON campaigns.someColumn = statistics.someColumn
WHERE
    campaigns.campaignName = '$randomVar'
    AND (campaigns.budget > statistics.budget
         OR statistics.budget DOES NOT EXIST)

(或者任何关系连接对这些表都有意义。)显式连接会对数据的相关性产生很多猜测。

如果您想要statistics.budgetNULL的记录,那么您可以这样做:

SELECT *
FROM
    campaigns
    LEFT OUTER JOIN statistics
        ON campaigns.someColumn = statistics.someColumn
WHERE
    campaigns.campaignName = '$randomVar'
    AND (campaigns.budget > statistics.budget
         OR statistics.budget IS NULL)

或者,如果您想进一步将其缩小到仅campaigns.budget具有值的记录,请执行以下操作:

SELECT *
FROM
    campaigns
    LEFT OUTER JOIN statistics
        ON campaigns.someColumn = statistics.someColumn
WHERE
    campaigns.campaignName = '$randomVar'
    AND (campaigns.budget > statistics.budget
         OR (statistics.budget IS NULL
             AND campaigns.budget IS NOT NULL))

当记录中的值"不存在时#34;这意味着值为NULL。因此,您可以使用IS NULLIS NOT NULL来检查该案例的存在与否。

  

我们会将其视为0

这将发生在SELECT条款中。首先,明确定义所需的列:

SELECT
    campaigns.aColumn,
    campaigns.anotherColumn,
    statistics.someOtherColumn

......等等。完成后,您可以定义一个子句,以便在给定列满足特定条件时将其返回给定值。例如,如果不是statistics.budget,则可以按原样返回NULL,如果不是0,则可以返回SELECT campaigns.aColumn, campaigns.anotherColumn, statistics.someOtherColumn, IFNULL(statistics.budget, 0) AS budget 。像这样:

WHERE campaigns.campaignName = '$randomVar'

注意:这是一个等待发生的SQL injection问题:

{{1}}

使用查询参数将值视为,而不是将字符串作为可执行代码直接插入查询中。