这里有一个PHP-juggler的问题。 我想使用PHP的普通“ mysql _ * 函数。
我有以下MySQL表:
+-----+-----------------+ | id | thread | +-----+-----------------+ | 14 | 01/ | | 14 | 02/ | | 14 | 03/ | | 15 | 01/ | | 22 | 01/ | | 24 | XXX | | 24 | XXX | | 24 | XXX | | 24 | XXX | | 32 | XXX | | 32 | XXX | +-----+-----------------+
“XXX”值是我的。我想将该表更改(更新)到这一个:
+-----+-----------------+
| id | thread |
+-----+-----------------+
| 14 | 01/ <- |
| 14 | 02/ |
| 14 | 03/ |
| 15 | 01/ <- |
| 22 | 01/ <- |
| 24 | 01/ <- |
| 24 | 02/ |
| 24 | 03/ |
| 24 | 04/ |
| 32 | 01/ <- |
| 32 | 02/ |
+-----+-----------------+
在“id”字段的每个 new 值上(其中“&lt; - ”是;我的制作,也是),“thread”字段值必须将自身重置为“01 / “并继续递增,直到找到”id“的新值。
我尝试用COUNT(id)查询以某种方式递增。我尝试在数组中存储。我还想到了mysql_data_seek()。唉,我似乎没有把它拉下来。
我得到了“线程”格式,但是:
$thread = $i < 10 ? "0$i" : $i;
因此,如果它大于10,则不会得到前导零。但这只是有趣的部分。
任何帮助将不胜感激。
谢谢
答案 0 :(得分:1)
SET @oldid = 0;
SET @counter = 0;
UPDATE tablename
SET thread = CONCAT(
LPAD(
CAST(IF(id = @oldid,
@counter := @counter + 1, -- same id, increment
@counter := (@oldid := id)/id) -- other id, set to 1
AS UNSIGNED),
2,'0'), -- pad with '0'
'/') -- append '/'
WHERE thread = 'XXX' -- or enumerate the whole thing if need be
ORDER BY id, thread;
可以将其添加到“plain ol'mysql_query”(连续3次:分别提供SET
&amp; UPDATE
个查询,或者忘记{{ 1}} ting任何东西,我只是讨厌未初始化的变量;)
答案 1 :(得分:0)
设置PRIMARY KEY元组(id,thread)并设置线程(但不是id!)作为AUTO_INCREMENT,然后 运行查询
INSERT INTO mytable (id) VALUES (24),(24),(32),(24),(32),(24)
和线程属性应自动增量设置。如果你坚持使用“0n /”形式,我建议创建 thread_string 属性,并根据NEW.thread属性创建BEFORE UPDATE触发器。 它有效吗?