如何在SELECT语句中更改列的值

3

我有一个在mysql表中的select语句,其结果如下:

topic user weight  
"hello" 324  3  
"hello" 21   1  
"second thread" 34 1  
"second thread" 21 1  
"second thread" 32 1  
"second thread" 3  3  
"hello" 23   1  

我希望将第一列“主题”转换为数字,以简化事情。是否可能只将一列像这样转换为数字:

topic user weight  
1     324  3  
1     21   1  
2     34   1  
2     21   1  
2     32   1  
2      3   3  
1     23   1  

非常感谢您的帮助!
最好的问候, Simone

3
这是一个固定的可能值集合吗?如果不是,就需要制作一个排名列表来进行匹配(可行,但更加复杂)。 - Michael Berkowski
可以的,稍微了解一下 查找表 和使用 连接语句(JOIN) - WhoaItsAFactorial
3个回答

1
也许可以使用临时表?
CREATE TABLE temp2 (
  id int AUTO_INCREMENT PRIMARY KEY,
  topic varchar(20));

INSERT INTO temp2 (topic)
SELECT DISTINCT topic FROM temp;

SELECT b.id, a.user, a.weight
FROM temp a
INNER JOIN temp2 b ON b.topic = a.topic

结果

| ID | 用户 | 权重 |
----------------------
|  1 |  324 |      3 |
|  1 |   21 |      1 |
|  2 |   34 |      1 |
|  2 |   21 |      1 |
|  2 |   32 |      1 |
|  2 |    3 |      3 |
|  1 |   23 |      1 |

查看演示


1
这里有一种方法,可以获取一个DISTINCT主题列表并分配行号以进行连接。 这使得可以在一个查询中完成,加上一个变量:
编辑:重构以在FROM子句中初始化rownum变量,看起来更整洁,不会为行号产生n * 2个值。
SELECT id, yourtable.*
FROM 
  yourtable
  JOIN (
    /* Suquery gets row rank per distinct topic */
    SELECT topic, @rownum:=@rownum+1 AS id
    FROM (
      /* Variable initialized in FROM clause */
      SELECT @rownum:=0
    ) sr JOIN (
      SELECT DISTINCT topic FROM yourtable
    ) t
  ) topicids ON yourtable.topic = topicids.topic

http://sqlfiddle.com/#!2/58d53/14

ID  TOPIC    USER   WEIGHT
1   "hello"  324    3
1   "hello"  21     1
2   "second" 34     1
2   "second" 21     1
2   "second" 32     1
2   "second" 3      3
1   "hello"  23     1

@SimoneGabbriellini 是如何执行的?在哪里执行的?这是一种类似于 PHP 客户端代码可能会出现的错误。另外请注意,我已经更新了它,不需要初始调用来设置变量。 - Michael Berkowski
@SimoneGabbriellini 如果您直接在MySQL客户端中运行上述查询,它将会正常工作。http://dev.mysql.com/doc/refman/5.0/en/commands-out-of-sync.html - Michael Berkowski

0

你也可以尝试一下

SELECT
   topic, 
   (SELECT COUNT(topic) FROM yourtable where topic = outer_table.topic),
   user, 
   weight  
FROM 
   yourtable  outer_table

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接