如何使用存储在其他表中的值更改时间戳

时间:2013-11-21 16:23:30

标签: mysql

我有这张桌子:

documents                                             
-------------------------------------------------------
id (int)                                              |
-------------------------------------------------------
created (timestamp not null default CURRENT_TIMESTAMP)|



keywords                                              
-------------------------------------------------------
document_id (int, references documents.id)            |
-------------------------------------------------------
name (varchar)                                        |
-------------------------------------------------------
value (varchar)                                       |
-------------------------------------------------------

好吧,关键字我有一个名为Date的关键字2013/22/10(格式不正确)。 documents.createddatetime default 0,因此,它现在为所有条目保留0000-00...

我需要实现的是将documents.created中的时间戳设置为2013-10-22 00:00:00(基于所有文档都具有的关键字date)。

所以我觉得我需要某种功能。

DELIMITER |
CREATE PROCEDURE ssp_docusearch_1.0.0_1.1.0 ()
  BEGIN
    SELECT
      k.name, k.value, d.id
    FROM
      keywords k 
    INNER JOIN
      documents d ON k.document_id = d.id
    WHERE k.name = 'Date'
  END
|
DELIMITER ;

但是我被卡住了,我不知道如何为每个结果更新documents.created子串k.keyword

我该怎么办?

2 个答案:

答案 0 :(得分:0)

这是一个完整的解决方案,它会创建格式错误的数据,然后修复它:

CREATE TABLE documents (
 id int(11),
 created timestamp not null default CURRENT_TIMESTAMP
);
2
INSERT INTO documents SET id = 1, created = 0;
INSERT INTO documents SET id = 2, created = 0;

CREATE TABLE keywords (
  document_id int(11),
  name varchar(128),
  value varchar(128)
);


INSERT INTO keywords SET document_id = 1, name = 'date', value = '2013-01-01 11:00:00';
INSERT INTO keywords SET document_id = 2, name = 'date', value = NOW();

UPDATE documents,
(
SELECT document_id, value
FROM keywords
WHERE name = 'date') AS subtable
SET created = subtable.value
WHERE documents.id = subtable.document_id

答案 1 :(得分:0)

在文档中搜索后,我最终得到了这个,这不会产生子查询并起作用:

UPDATE documents d, keywords k
SET d.created = concat( substr(k.value,1,4), '-', substr(k.value,9,2), '-', substr(k.value,6,2) )
WHERE k.keyword = 'Fecha' AND k.document_id = d.id;