Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.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 将数据从一个表复制到另一个表,但添加第二个WHERE子句不会插入数据_Php_Mysql_Where Clause - Fatal编程技术网

Php 将数据从一个表复制到另一个表,但添加第二个WHERE子句不会插入数据

Php 将数据从一个表复制到另一个表,但添加第二个WHERE子句不会插入数据,php,mysql,where-clause,Php,Mysql,Where Clause,我有两张桌子。当用户单击一个按钮时,它会将数据从表1复制到表2中,而表2中不存在数据 我让查询工作得很好,直到我在第一个名为site的表中添加了一个新列——该列要么设置为yes,要么设置为NULL 这是我尝试过的问题。它不再向表2中插入任何数据 $copybidderquery = "INSERT INTO past_bidders(bidnum, bidfname, bidlname, bidphnum, bidlicense, bidaddress, bidtaxexempt, bidtax

我有两张桌子。当用户单击一个按钮时,它会将数据从表1复制到表2中,而表2中不存在数据

我让查询工作得很好,直到我在第一个名为site的表中添加了一个新列——该列要么设置为yes,要么设置为NULL

这是我尝试过的问题。它不再向表2中插入任何数据

$copybidderquery = "INSERT INTO past_bidders(bidnum, bidfname, bidlname, bidphnum, bidlicense, bidaddress, bidtaxexempt, bidtaxid, date_created) 
SELECT bidnum, bidfname, bidlname, bidphnum, bidlicense, bidaddress, bidtaxexempt, bidtaxid, date_created 
FROM bidders 
WHERE (bidfname, bidlname, bidphnum, bidlicense, bidaddress) 
NOT IN (SELECT bidfname, bidlname, bidphnum, bidlicense, bidaddress FROM past_bidders) 
AND onsite != 'yes'";
我也尝试过将移动到现场的位置!='是的,在WHERE之后,它仍然做同样的事情

$copybidderquery = "INSERT INTO past_bidders(bidnum, bidfname, bidlname, bidphnum, bidlicense, bidaddress, bidtaxexempt, bidtaxid, date_created) 
SELECT bidnum, bidfname, bidlname, bidphnum, bidlicense, bidaddress, bidtaxexempt, bidtaxid, date_created 
FROM bidders 
WHERE onsite != 'yes'
AND (bidfname, bidlname, bidphnum, bidlicense, bidaddress) 
NOT IN (SELECT bidfname, bidlname, bidphnum, bidlicense, bidaddress FROM past_bidders)";
如上所述,如果没有现场查询,此查询工作正常!='是的

我想这只是我忽略了一些小的语法错误。任何帮助都将不胜感激

INSERT INTO past_bidders(bidnum, bidfname, bidlname, bidphnum, bidlicense, bidaddress, bidtaxexempt, bidtaxid, date_created) 
SELECT bidnum, bidfname, bidlname, bidphnum, bidlicense, bidaddress, bidtaxexempt, bidtaxid, date_created 
FROM bidders 
WHERE  onsite is NULL AND (bidfname, bidlname, bidphnum, bidlicense, bidaddress) 
NOT IN (SELECT bidfname, bidlname, bidphnum, bidlicense, bidaddress FROM past_bidders) 
;
检查以下示例,当您说“不等于”时,它不会返回空值

mysql> select * from calls;
+----+------------+---------+
| id | date       | user_id |
+----+------------+---------+
|  1 | 2016-06-22 |       1 |
|  2 | 2016-06-22 |    NULL |
|  3 | 2016-06-22 |    NULL |
|  4 | 2016-06-23 |       2 |
|  5 | 2016-06-23 |       1 |
|  6 | 2016-06-23 |       1 |
|  7 | 2016-06-23 |    NULL |
+----+------------+---------+
7 rows in set (0.00 sec)

mysql> select * from calls where user_id!=1;
+----+------------+---------+
| id | date       | user_id |
+----+------------+---------+
|  4 | 2016-06-23 |       2 |
+----+------------+---------+
1 row in set (0.00 sec)

mysql> select * from calls where user_id is null;
+----+------------+---------+
| id | date       | user_id |
+----+------------+---------+
|  2 | 2016-06-22 |    NULL |
|  3 | 2016-06-22 |    NULL |
|  7 | 2016-06-23 |    NULL |
+----+------------+---------+
3 rows in set (0.00 sec)
检查以下示例,当您说“不等于”时,它不会返回空值

mysql> select * from calls;
+----+------------+---------+
| id | date       | user_id |
+----+------------+---------+
|  1 | 2016-06-22 |       1 |
|  2 | 2016-06-22 |    NULL |
|  3 | 2016-06-22 |    NULL |
|  4 | 2016-06-23 |       2 |
|  5 | 2016-06-23 |       1 |
|  6 | 2016-06-23 |       1 |
|  7 | 2016-06-23 |    NULL |
+----+------------+---------+
7 rows in set (0.00 sec)

mysql> select * from calls where user_id!=1;
+----+------------+---------+
| id | date       | user_id |
+----+------------+---------+
|  4 | 2016-06-23 |       2 |
+----+------------+---------+
1 row in set (0.00 sec)

mysql> select * from calls where user_id is null;
+----+------------+---------+
| id | date       | user_id |
+----+------------+---------+
|  2 | 2016-06-22 |    NULL |
|  3 | 2016-06-22 |    NULL |
|  7 | 2016-06-23 |    NULL |
+----+------------+---------+
3 rows in set (0.00 sec)

可能存在隐藏字符,或者值不是“是”,或者您也应该检查NOTNULL

$copybidderquery = "INSERT INTO past_bidders(bidnum, bidfname, bidlname, bidphnum, bidlicense, bidaddress, bidtaxexempt, bidtaxid, date_created) 
                                  SELECT bidnum, bidfname, bidlname, bidphnum, bidlicense, bidaddress, bidtaxexempt, bidtaxid, date_created 
                FROM bidders 
                WHERE (bidfname, bidlname, bidphnum, bidlicense, bidaddress) 
                NOT IN (SELECT bidfname, bidlname, bidphnum, bidlicense, bidaddress FROM past_bidders) 
                AND trim(lower(onsite) )!= 'yes';

可能存在隐藏字符,或者值不是“是”,或者您也应该检查NOTNULL

$copybidderquery = "INSERT INTO past_bidders(bidnum, bidfname, bidlname, bidphnum, bidlicense, bidaddress, bidtaxexempt, bidtaxid, date_created) 
                                  SELECT bidnum, bidfname, bidlname, bidphnum, bidlicense, bidaddress, bidtaxexempt, bidtaxid, date_created 
                FROM bidders 
                WHERE (bidfname, bidlname, bidphnum, bidlicense, bidaddress) 
                NOT IN (SELECT bidfname, bidlname, bidphnum, bidlicense, bidaddress FROM past_bidders) 
                AND trim(lower(onsite) )!= 'yes';
!=当任一值为NULL时返回NULL。你有两个选择:

SELECT bidnum, bidfname, bidlname, bidphnum, bidlicense, bidaddress, bidtaxexempt, bidtaxid, date_created 
FROM bidders 
WHERE (bidfname, bidlname, bidphnum, bidlicense, bidaddress) NOT IN
          (SELECT bidfname, bidlname, bidphnum, bidlicense, bidaddress
           FROM past_bidders
          ) AND
      onsite is null;
或者,使用空安全等式:

SELECT bidnum, bidfname, bidlname, bidphnum, bidlicense, bidaddress, bidtaxexempt, bidtaxid, date_created 
FROM bidders 
WHERE (bidfname, bidlname, bidphnum, bidlicense, bidaddress) NOT IN
          (SELECT bidfname, bidlname, bidphnum, bidlicense, bidaddress
           FROM past_bidders
          ) AND
      (NOT onsite <=> 'yes');
!=当任一值为NULL时返回NULL。你有两个选择:

SELECT bidnum, bidfname, bidlname, bidphnum, bidlicense, bidaddress, bidtaxexempt, bidtaxid, date_created 
FROM bidders 
WHERE (bidfname, bidlname, bidphnum, bidlicense, bidaddress) NOT IN
          (SELECT bidfname, bidlname, bidphnum, bidlicense, bidaddress
           FROM past_bidders
          ) AND
      onsite is null;
或者,使用空安全等式:

SELECT bidnum, bidfname, bidlname, bidphnum, bidlicense, bidaddress, bidtaxexempt, bidtaxid, date_created 
FROM bidders 
WHERE (bidfname, bidlname, bidphnum, bidlicense, bidaddress) NOT IN
          (SELECT bidfname, bidlname, bidphnum, bidlicense, bidaddress
           FROM past_bidders
          ) AND
      (NOT onsite <=> 'yes');

我也没有意识到这一点。我需要使用is null而不是is not null。但这肯定是正在发生的事情。如果你想把它改为非空,我会接受你的回答。谢谢,所以木奇也不知道。我需要使用is null而不是is not null。但这肯定是正在发生的事情。如果你想把它改为非空,我会接受你的回答。非常感谢您现场不为空是多余的。如果现场为null,则紧靠该谓词之前的谓词将无法计算为TRUE。现场为非null是冗余的。如果现场为null,则紧靠该谓词之前的谓词无法计算为TRUE。我怀疑问题在于现场中的null值。这只是猜测,因为我们没有看到任何示例数据或预期输出。我们确实知道这一点当现场为空时,“是”比较将返回空。如果要包括现场为空的行,则需要以不同的方式写入条件。举一个例子,不是现场的“是”,而是有其他模式会返回相同的结果。我怀疑问题是现场的空值。这只是猜测,因为我们没有看到任何示例数据或预期输出。我们确实知道这一点当现场为空时,“是”比较将返回空。如果要包括现场为空的行,则需要以不同的方式写入条件。仅举一个例子,不是现场的“是”,但还有其他模式将返回相同的结果。