0

php mysql 查询我有多个链接表 - 我还有一个表,只有在某些条件存在时才会创建和输入,所以我想将它添加到我的查询中,以避免必须通过数千次查询搜索来寻找这种特殊情况

这是我当前的查询

$query = "SELECT a.UUID FROM contract a 
        INNER JOIN geoPoint b ON a.customer_UUID = b.customerUUID
        WHERE b.garcom_UUID = '$garbCom'
        AND b.city_UUID = '$city'";

然后,我检查退回的每件物品(以千计)

while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) 
{
    $sentdata = getothertable($row['UUID']); //checks if the item is in the table
             $sent = $sentdata ['senttoGarcom'];
             if($sent == 0) //if it wasn't found add it to my list
    {
       array_push($Contracts,$row['UUID']);
    }
    }

而不是我只想让它成为一个查询 - 伪代码是这样的

 $query = "SELECT a.UUID FROM contract a 
            INNER JOIN geoPoint b ON a.customer_UUID = b.customerUUID
            INNER JOIN contract_sales c ON a.UUID = c.contractUUID
            WHERE b.garcom_UUID = '$garbCom'
            AND b.city_UUID = '$city' AND c.DOESNOTEXIST";

这样我就不必退回数千我只会退回尚未在contract_sales表中的少数几个,我可以继续我的业务......

感谢任何帮助!

4

3 回答 3

2

只需用 a 检查NULLc 的行outer join

$query = "SELECT a.UUID FROM contract a 
        INNER JOIN geoPoint b ON a.customer_UUID = b.customerUUID
        LEFT OUTER JOIN contract_sales c ON a.UUID = c.contractUUID
        WHERE b.garcom_UUID = '$garbCom'
        AND b.city_UUID = '$city' AND c.contractUUID IS NULL ";
于 2013-06-20T03:50:40.650 回答
1

我认为这是一个左外连接问题

看看这个例子。您特别需要检查表中您要查找缺失行 rof 的列中是否存在空值

mysql左外连接

于 2013-06-20T03:42:53.820 回答
1

听起来NOT EXISTS你需要一个相关的子查询:

$query = "SELECT a.UUID FROM contract a 
            INNER JOIN geoPoint b ON a.customer_UUID = b.customerUUID
            WHERE b.garcom_UUID = '$garbCom'
            AND b.city_UUID = '$city' 
            AND NOT EXISTS (SELECT 1 
                              FROM contract_sales c
                              WHERE c.contractUUID = a.UUID)";
于 2013-06-20T03:44:11.453 回答