2

2つの列(idとword)を持つテーブルがあります。データ列を持つ別のテーブルがあり、その値は最初のテーブルの単語を参照しています。サンプルコードは次のとおりです。

CREATE TABLE `words` (
  `id` TINYINT,
  `word` VARCHAR(50),
  PRIMARY KEY (`id`)
);

INSERT INTO `words` VALUES (1, 'one'), (2, 'two'), (3, 'three');

CREATE TABLE `data` (
  `data` TEXT
);

INSERT INTO `data` VALUES ('foo=bar\nword=one'), ('word=three');

単語のIDへの参照を置き換えたいと思います。にword=oneなるword=1word=threeになるword=3、など。このクエリを試しましたが、機能しません。

UPDATE `data`, `words` SET `data`.`data` = REPLACE(`data`.`data`, CONCAT('word=', `words`.`word`), CONCAT('word=', `words`.`id`));

私が望むことを達成する方法についての提案やアイデアはありますか?ありがとう!

編集:データ列がINI形式であることに言及するのを忘れたため、他のキーと値のペアもフィールドに含めることができます。例を調整しました。

編集:@nortpholeのアイデアのおかげで、私は必要なクエリを作成することができました:

UPDATE `data` SET `data`.`data` = REPLACE(`data`.`data`, CONCAT('word=', SUBSTRING_INDEX(SUBSTRING_INDEX(`data`.`data`, 'word=', -1), '\n', 1)), CONCAT('word=', (SELECT `id` FROM `words` WHERE `words`.`word` = SUBSTRING_INDEX(SUBSTRING_INDEX(`data`.`data`, 'word=', -1), '\n', 1))));
4

1 に答える 1

2

次のようなものを試してください。

UPDATE data 
   SET data = CONCAT('word=',(SELECT id 
                                FROM words 
                               WHERE words.word = SUBSTRING_INDEX(data.data,'=',-1)))

申し訳ありませんが、ここにテストするMySqlがありません(特に、SUBSTRINGが'word ='の後にすべてを取得していることを確認してください)

編集:=記号の最後のインデックスを取得するために-1でsubstring_indexを使用します。

于 2012-07-03T21:20:47.557 に答える