Почему мой CSV-файл импортируется в базу данных в алфавитном порядке по первому столбцу Product_key? Вместо того, чтобы импортировать просто построчно, от первой строки CSV до последней строки?
Мой CSV не сортируется по Product_key, но после импорта строки сортируются в алфавитном порядке в my_table, как видно в PHPMyAdmin. Это таблица InnoDB.
Я не использую ASC или DESC в $pdo->prepare
Мне хотелось бы это выяснить, потому что на странице я показываю данные из таблицы под формой загрузки файла CSV и хочу, чтобы данные выглядели так же, как загруженный файл.
Изменить 26.03.26:
SHOW CREATE TABLE показывает:
vw_star_ratings CREATE TABLE `vw_star_ratings` (
`product_key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci NOT NULL,
`ID_key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci NOT NULL,
`value` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci NOT NULL,
UNIQUE KEY `key_index` (`product_key`,`ID_key`,`value`),
KEY `product_key` (`product_key`),
KEY `ID_key` (`ID_key`),
KEY `value` (`value`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci
Есть идеи?
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
]);
try {
$pdo->exec("TRUNCATE TABLE my_table");
$file = fopen($fileTmpPath, "r");
// Start transaction
$pdo->beginTransaction();
$stmt = $pdo->prepare("
INSERT INTO my_table (product_key, ID_key, value)
VALUES (?, ?, ?)
");
// Skip header
fgetcsv($file);
while (($row = fgetcsv($file, 1000, ",")) !== FALSE) {
if (count($row) < 3) continue;
$stmt->execute([$row[0], $row[1], $row[2]]);
}
fclose($file);
$pdo->commit();