但是,我需要在我的MySQL数据库和我的Csv中使用完全相同的顺序。
实际上,例如,csv的1000行可以在我的基地的800位
我需要像“按列1排序”这样的东西,但我找不到线索。
感谢您的帮助
Ps:我有2个主要钥匙(产品参考),而且不是数学顺序(如1,8,4等)
编辑:我的代码
$dataload = 'LOAD DATA LOCAL INFILE "'.__FILE__.'../../../../bo/csv/'.$nomfichier.'"
REPLACE
INTO TABLE gc_csv CHARACTER SET "latin1"
FIELDS TERMINATED BY "\t"
IGNORE 1 LINES
';
我只需要使用csv并使用本地内联数据......并且命令是完全受到尊重的,我不知道为什么......
我的设计表
CREATE TABLE `csv` (
`example` int(20) unsigned NOT NULL,
`example` int(15) unsigned NOT NULL,
`example` varchar(10) default NULL,
[...]
`example` varchar(4) default NULL,
PRIMARY KEY (`RefCatSYS`,`IdProduit`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
答案 0 :(得分:1)
在表中添加auto_increment列,DEFAULT为NULL。使用LOAD DATA INFILE加载数据时,该列没有值,并且将为其分配一个自动生成的ID。选择按列排序的数据。
kostja@annie:~$ sudo cat /var/lib/mysql/test/foo.csv
10
9
8
7
6
5
4
3
2
1
mysql> create table tmp (example int primary key, id int unique auto_increment default null);
Query OK, 0 rows affected (0.11 sec)
mysql> load data infile "foo.csv" into table tmp;
Query OK, 10 rows affected, 10 warnings (0.03 sec)
Records: 10 Deleted: 0 Skipped: 0 Warnings: 10
mysql> select * from tmp;
+---------+----+
| example | id |
+---------+----+
| 10 | 1 |
| 9 | 2 |
| 8 | 3 |
| 7 | 4 |
| 6 | 5 |
| 5 | 6 |
| 4 | 7 |
| 3 | 8 |
| 2 | 9 |
| 1 | 10 |
+---------+----+
10 rows in set (0.00 sec)
答案 1 :(得分:0)
关系数据库中的表是无序的记录集合。使用SORT BY
运行查询时,可以按特定顺序获取行。如果查询不包含SORT BY
子句,则服务器按照它们在存储介质上的顺序返回行。更新记录时,此顺序有时会发生变化。您必须永远不要依赖它,并始终使用SORT BY
(和索引)来获取结果集中行的特定顺序。
LOAD DATA INFILE
从CSV文件中读取行并按照它们在文件中的顺序插入它们。除了设置自动递增列的值(如果表中有一个),CSV文件中的行顺序无关紧要。
答案 2 :(得分:0)
我已经解决了这个问题。事实上,WS向我发送了一个带有两个主键的多个csv的csv。在2365和9798行,RefCatSYS和IdProduit一样。因此,加载数据infile由9798替换第2365行并更改顺序。
我要求他们发送第3张和唯一的主键
感谢您的帮助,抱歉中断。