У меня возникла странная проблема с запросом к следующей таблице Mysql:
CREATE TABLE `BulkTransuploads` (
`bulktransuploads_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id of the upload',
`bulktransuploads_time` datetime NOT NULL COMMENT 'The upload time',
`bulktransuploads_val_id` int(10) unsigned NOT NULL COMMENT 'TransactionID value. value 1',
`bulktransuploads_val_orderid` varchar(100) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'OrderID value. value 2',
`bulktransuploads_val_url` varchar(400) NOT NULL COMMENT 'URL value. value 3',
`bulktransuploads_val_tracking` varchar(40) NOT NULL COMMENT 'Tracking value. value 4',
`bulktransuploads_status_v1` varchar(150) NOT NULL COMMENT 'Status for value1. OK or error message',
`bulktransuploads_status_v2` varchar(150) NOT NULL COMMENT 'Status for value2. OK or error message',
`bulktransuploads_status_v3` varchar(150) NOT NULL COMMENT 'Status for value3. OK or error message',
`bulktransuploads_status_v4` varchar(150) NOT NULL COMMENT 'Status for value4. OK or error message',
PRIMARY KEY (`bulktransuploads_id`)
) ENGINE=ARCHIVE AUTO_INCREMENT=242 DEFAULT CHARSET=utf8
Мне нужно извлечь некоторые значения, имеющие идентификаторы, поэтому я подумал, что кратчайший путь — использовать предложение IN.
mysql> SELECT * FROM BulkTransuploads WHERE bulktransuploads_id IN (233,231,232)\G;
Приведенный выше запрос возвращает следующий результат:
*************************** 1. row ***************************
bulktransuploads_id: 231
*************************** 2. row ***************************
bulktransuploads_id: 232
*************************** 3. row ***************************
bulktransuploads_id: 233
3 rows in set (0.00 sec)
Я удалил значения других столбцов, чтобы освободить здесь место. В целом этот запрос делает почти то, что я ожидал, хотя я ожидал другого порядка (233 231 232), поскольку этот порядок был записан в запросе (предложение IN). Поскольку мне нужно, чтобы результаты были упорядочены по убыванию, я изменил свой запрос следующим образом:
mysql> SELECT * FROM BulkTransuploads WHERE bulktransuploads_id IN (233,231,232) ORDER BY bulktransuploads_id DESC\G;
Мой новый запрос возвращает неуклюжий результат:
*************************** 1. row ***************************
bulktransuploads_id: 200
*************************** 2. row ***************************
bulktransuploads_id: 200
*************************** 3. row ***************************
bulktransuploads_id: 200
3 rows in set (0.00 sec)
Я не могу понять, почему он возвращает 3 раза идентификатор 200. ЕДИНСТВЕННАЯ разница между запросами - ORDER BY bulktransuploads_id DESC
, поэтому, несомненно, предложение ORDER BY искажает мои результаты, но мой вопрос: почему?