如何为MySQL / PHP中的数百万条记录分配预定义的值

时间:2011-07-05 17:12:28

标签: php database

这是我关注的问题:

我有一个包含不同列(main_tableidreg_date等)的mysql表(time)。它有大约3000万行并且增长。

最近我发现我需要为表格分配一个包含1550个不同名称(例如"Michael Flowers""Dora Dorn"等)的附加列表/表格。

将哪个名称分配给哪一行并不重要,因此我可以使用随机ID功能。但是从main_table行查询时,名称应该始终相同。

最直接的解决方案是更改main_table,然后为每行插入1到1550(例如10)的随机值。但是,由于我认为这会导致性能问题,因此我对此犹豫不决。另一个原因是行数不断增加,因此我可能需要添加一些批处理。

唯一的限制是,一旦为特定行分配了名称,它应该始终返回相同的名称。例如,如果我将"Michael Flowers"(其id将在1到1550之间的任何位置,例如10)分配到主表中的一行(例如30000),我需要能够始终检索相同的名称。检查行30000。

因此,我在想是否有可能创建一个函数/算法,使main_table中的每一行都映射到1550个可用名称中的名称,如

echo name_of_row(30000);  
// result would be 10, I may then query and my list and find it's Michael Flowers

1 个答案:

答案 0 :(得分:0)

假设您的新名称表具有从1开始的连续ID号 - > 1500,那么你可以简单地在主表中添加一个新的整数字段并执行

UPDATE main_table SET linkfield = FLOOR(1 + (rand() * 1550))

MySQL的rand功能不具备冷冻图形质量,但在这种情况下肯定能做得足够好。

然后,您可以通过简单的连接获得main_table的随机名称值:

SELECT main_table.*, name_table.name
FROM main_table
LEFT JOIN name_table.id = main_table.linkfield