Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 是否可以使用其他列中的重复文本信息创建组id_Mysql - Fatal编程技术网

Mysql 是否可以使用其他列中的重复文本信息创建组id

Mysql 是否可以使用其他列中的重复文本信息创建组id,mysql,Mysql,假设我们有一张这样的桌子 id | group_id | TEXT | -------------------------------------- 1 | | NBA -------------------------------------- 2 | | NHL -------------------------------------- 3 |

假设我们有一张这样的桌子

id      |   group_id    |   TEXT    |
--------------------------------------
1       |                   |   NBA
--------------------------------------
2       |                   |   NHL
--------------------------------------
3       |                   |   NBA
--------------------------------------
4       |                   |   NHL
--------------------------------------
5       |                   |   NHL
--------------------------------------
是否可以使用MySQL函数或查询或任何东西创建组_id:),使用重复(重复)列文本的事实?有那样一张桌子

id      |   group_id    |   TEXT    |
--------------------------------------
1       |       10      |   NBA
--------------------------------------
2       |       11      |   NHL
--------------------------------------
3       |       10      |   NBA
--------------------------------------
4       |       11      |   NHL
--------------------------------------
5       |       11      |   NHL
--------------------------------------
您可以尝试使用以下功能:

SELECT id, HEX(Text) as group_id, Text
FROM Tbl
如果需要十进制值,可以从十六进制转换为:

SELECT id, CONV(HEX(Text), 16, 10) as group_id, Text
FROM Tbl
结果:

ID  GROUP_ID    TEXT
1   5128769 NBA
2   5128769 NBA
3   5130316 NHL
4   5130312 NHH
5   5130316 NHL
8   4342081 BAA
9   4342081 BAA


看着我以前的答案,我想到了另一种不用tmp表就能解决问题的方法:

CREATE Table tbl (id int,grpid int, text varchar(10));
INSERT INTO tbl (id,text) VALUES (1,'NBA'),(2,'NBA'),
   (3,'NHL'),(4,'NHH'),(5,'NHL'),(8,'BAA'),(9,'BAA');

SET @i:=100; -- set the start sequence number for grpid
UPDATE tbl INNER JOIN ( 
SELECT @i:=@i+1 gid,text FROM (
 SELECT DISTINCT text FROM tbl ORDER BY text ) dt ) gi
ON tbl.text=gi.text 
SET tbl.grpid=gi.gid;
更新后的tbl

| ID | GRPID | TEXT |
---------------------
|  1 |   102 |  NBA |
|  2 |   102 |  NBA |
|  3 |   104 |  NHL |
|  4 |   103 |  NHH |
|  5 |   104 |  NHL |
|  8 |   101 |  BAA |
|  9 |   101 |  BAA |

是的,这很有帮助!只是一个问题-是否可以只使用组id中的数值?因为现在它创建了类似4E4241的值-我最好只使用数值-即4241非常优雅和有用的解决方案!当我在大卷(例如,超过10000个卷)上使用这种方法时,我在第1行遇到以下错误1104(42000):SELECT将检查超过MAX_JOIN_SIZE的行;检查您的WHERE并使用SET SQL_BIG_SELECTS=1或SET MAX_JOIN_SIZE=#如果选择正确。您可以帮助如何在命令中包含SET SQL\u BIG\u SELECTS=1吗?或者我应该在my.cnf中包含SQL\u BIG\u SELECTS=1?提前谢谢你!
INSERT
语句中的
SELECT
只查看一个表。因此,我很惊讶MySQL抱怨最大加入大小。您是否可以自行运行SELECT命令来确定它是否确实返回了预期的输出?第二种可能是
UPDATE
语句:如果忘记正确包含连接,则可能会遇到困难。。。(只是一个猜测)。既然您已经有了密钥,为什么还要寻找一个数值?实际上,您是在复制列,因此您的数据库不再规范化。这是一个中间拍卖,通过数字组_id进行进一步处理-下面使用十六进制的解决方案看起来最简单-但它创建了字母数字(!)组id如4E4241-但我只希望有数字的,如424241…也许你知道如何强制十六进制只创建数字值?问题仍然存在,我不明白为什么你需要组的数字翻译,因为你已经有了组标识符(NBA、NHL等是完全有效的组标识符)用十六进制值编辑答案以决定是否对您有帮助,请标记正确答案,M8抱歉延迟回复,我与Internet连接中断。但令人伤心和奇怪的问题是,您的新代码再次给了我相同的-#1104-SELECT将检查超过MAX#U JOIN#U大小的行;检查您的WHERE并使用SET SQL_BIG_SELECTS=1或SET MAX_JOIN_SIZE=#如果选择正确。在My.cnf中,我无法添加行sql\u big\u selects=1,因为mysql启动失败。My.cnf中的Max_join_size设置为Max_join_size=10000000我们可以在代码中使用某种方式将SQL_BIG_SELECTS=1吗(如果MySql真的想在那里看到它的话?那么我们的情况是,代码在一个有2000条记录的表上工作得很好,但是处理另一个有27000条记录的表时出现了问题……这只是提醒代码可以工作!但是有些事情与要处理的行数有关。@Serge非常奇怪,但我不知道为什么会发生这种情况re.27.000条记录对于MySQL数据库来说并不是一个很大的数量。也许有一些DBA对这种问题知道得更多?请,帮助我们!;-)我同意你的观点,情况非常奇怪。你的两个代码都工作得很好,27000行不是MySQL的卷。但仍然一样:(希望有人能提出一个想法。我刚刚将我的行数扩展到117656行。它运行起来没有问题。如果我将行数再乘以7,我会遇到一个表生成超时(>60秒)。但是没有超出像
MAX\u JOIN\u SIZE
这样的消息。
| ID | GRPID | TEXT |
---------------------
|  1 |   102 |  NBA |
|  2 |   102 |  NBA |
|  3 |   104 |  NHL |
|  4 |   103 |  NHH |
|  5 |   104 |  NHL |
|  8 |   101 |  BAA |
|  9 |   101 |  BAA |