Php 选择不正常工作

Php 选择不正常工作,php,mysql,select,distinct,Php,Mysql,Select,Distinct,好的,我正试图将一个表中的唯一记录复制到另一个表中,然后将它们写回,以消除完全重复的记录。下面是我用来做这件事的查询 // 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 CHARSE

好的,我正试图将一个表中的唯一记录复制到另一个表中,然后将它们写回,以消除完全重复的记录。下面是我用来做这件事的查询

// 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,并且只复制唯一的记录

我知道这一定是件愚蠢的事,我在某处犯了个错误。但我看不见


有什么想法吗?显然,我会尽我所能提供。

您的
中的任何字段是否可以选择DISTINCT…
NULL
?因为
NULL=NUL< <代码> > <代码>区分不考虑行X,其中FeldA为NULL和ROY,其中FeldA为NULL。

< P>问题是基于ME,作为我的数据库包装器的一部分,执行一个函数以在运行“RunQuyIE()”时获取查询结果。它是为截断或创建表等设计的。但是,我怀疑当它试图执行查询和获取结果时,它执行了两次,因为它试图获取一个结果集。我不能完全发声,但长话短说,我试图获取一个记录集,但没有一个可以获取,但它影响了写入过程


这是我第一次需要插页,这对我没有帮助。。。。使用包装器进行选择。吸取的教训:)

首先想到的是:是否必须提交以NewTransaction()开始的事务?这可能会有所不同,因为当您“一步一步”运行它时,您的会话可能会在单个步骤之间关闭,而在整个过程中保持打开状态
,添加一些唯一的键,然后将
替换到TempQuickIcon中,从_ListingQuickIcon中选择*;DROP TABLE _ListingQuickIcon;将TempQuickIcon重命名为_ListingQuickIcon?从技术上讲,NewTransation()函数不必存在,因为它是一个包装函数,用于为插入或更新查询构建字段。最终,DeleteRecord()所做的只是“从
\u ListingQuickIcon
中删除,其中
ListingID
='{$GetNewListingID'”rik:这个表会变得特别大,我不确定一直克隆这个表是否会像索引选择一样高效?不过这是值得研究的。为什么在选择(和删除)中在{$GetNewListingID}周围加引号?如果ListingID是一个整数,则不需要它们。我怀疑这与问题有关,但根据代码的其余部分,我想可能会因此发生一些奇怪的事情……这是一个很好的想法,但不是……两个表中的两个字段都不是空的。\我知道这是一个错误:P