好的,我正在尝试将一个表中的唯一记录复制到另一个表中,然后将其写回以努力清除完全重复项。以下是我用来执行此操作的查询。
// create new "temp" table
$Database->Query = "
CREATE TABLE IF NOT EXISTS `TempQuickIcon` (
`ListingID` int(11) NOT NULL,
`QuickIconID` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8
";
$Database->RunQuery();
// insert distinctive values but only for this listing id
$Database->Query = "INSERT INTO TempQuickIcon(`ListingID`,`QuickIconID`) SELECT DISTINCT `ListingID`,`QuickIconID` FROM `_ListingQuickIcon` WHERE `ListingID` = '{$GetNewListingID}'";
$Database->RunQuery();
// delete this listings records from the original table
$Database->NewTransaction();
$Database->Table = "_ListingQuickIcon";
$Database->Conditions = "`ListingID` = '{$GetNewListingID}'";
$Database->DeleteRecord();
// insert records from "temp" table
$Database->Query = "INSERT INTO _ListingQuickIcon(`ListingID`,`QuickIconID`) SELECT DISTINCT `ListingID`,`QuickIconID` FROM `TempQuickIcon`";
$Database->RunQuery();
$Database->Query = "TRUNCATE TABLE `TempQuickIcon`";
$Database->RunQuery();
好的,显然我有一个数据库包装器,但我确保通过逐个测试它们没有任何功能问题。我还逐个测试了每个查询,程序也有效。
然而,当我尝试一起运行整个查询序列时,换句话说执行脚本......它处理没有错误但实际上似乎没有跟随DISTINCT并复制两个(或更多......如果有的话) TempQuickIcon中有多个重复的记录。
但如果我单独运行脚本的每个部分,则会遵循DISTINCT并且只复制唯一的记录。
我知道它一定是蠢事,我在某个地方犯了错误。但是我看不到它。
有什么想法?我显然会尽我所能。
答案 0 :(得分:1)
问题是基于我,作为我的数据库包装器的一部分,在运行'RunQuery()'时执行一个函数来获取查询结果...这是为TRUNCATE或CREATE TABLE等设计的。但是,我怀疑当它试图执行查询并获取结果时,它执行了两次因为它试图获得结果集。我不能完全发声,但长话短说的是,当我没有要获取时,我试图获取一个记录集,但它影响了写入过程。
这是第一次我需要使用包装器进行INSERT .... SELECT没有帮助。获得的经验:)
答案 1 :(得分:0)
SELECT DISTINCT ...
中的任何字段都可以NULL
吗?因为NULL!=NULL
,DISTINCT
不考虑其中fieldA为空的行X和其中fieldA为NULL的rowY是相同的。