отдельный выбор не работает должным образом - PullRequest
2 голосов
/ 24 января 2011

Хорошо, я пытаюсь скопировать уникальные записи из одной таблицы в другую, а затем записать их обратно, чтобы отсеять точные дубликаты.Ниже приведены запросы, которые я использую для этого.

// 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 следуетуникальные записи копируются.

Я знаю, что это должно быть что-то глупое и что я где-то совершаю ошибку.Но я не вижу этого.

Есть мысли?Я, очевидно, предоставлю то, что могу.

Ответы [ 2 ]

1 голос
/ 25 января 2011

Проблема заключалась в том, что я, как часть моей оболочки базы данных, выполнял функцию для извлечения результатов запроса при запуске RunQuery () '... которая была разработана для таких вещей, как TRUNCATE или CREATE TABLE и т. Д.и т.д. Однако я подозреваю, что когда он пытался выполнить запрос и получить результаты, он выполнялся дважды, потому что пытался получить набор результатов.Я не могу озвучить это, но короче говоря, я пытался получить набор записей, когда его не было, но это повлияло на процесс записи.

Это не помогаетэто первый раз, когда мне нужно сделать INSERT .... SELECT с оберткой.Извлеченный урок:)

0 голосов
/ 24 января 2011

Может ли любое из полей в вашем SELECT DISTINCT ... быть NULL?Поскольку NULL!=NULL, DISTINCT не считает строку X, где поле A равно NULL, и строку Y, где поле A равно NULL, одинаковы.

...