2013-01-08 42 views
3

我有三列表的表如下插入子內容到新列的數據插入

CREATE TABLE `auto_bulk` (
    `bulk_id` int(5) NOT NULL auto_increment, 
    `heading` varchar(25) NOT NULL, 
    `content` text NOT NULL, 
    PRIMARY KEY (`bulk_id`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8; 

我需要直接添加一些散裝記錄到MySQL數據庫。

INSERT INTO auto_bulk(heading,content)VALUES('xxx','xxx'); 

但我的問題是,我只給內容,標題應該是content.Like的前5個字母,

INSERT INTO auto_bulk(heading,content)VALUES('Hello','Helloworld123'); 

我知道該怎麼做用PHP與SUBSTR但我想知道有沒有辦法做到這一點直接在MySQL 我都試過,但沒有運氣

INSERT INTO auto_bulk(heading,content)VALUES(SUBSTRING(content,1,5),'Helloworld123'); 

感謝

+0

您可以使用觸發器 –

回答

2

嘗試:

INSERT INTO auto_bulk(content,heading) 
SELECT @var := 'Helloworld123', SUBSTRING(@var,1,5); 
+1

僅供參考,我不得不糾正我的第一次嘗試。嘗試修改後的答案。我加倍檢查,它的工作。基本上使用@變量可以讓你在SUBSTRING中再次引用它。我在插入中切換了字段名稱的順序。 – DWright

+1

Hooray這真是棒極了...... :)感謝Buddy你救了我的時間。現在我在mysql中學到了另外一件事,他謝謝。我會盡可能接受你的答案。 – vinu

+0

很酷,很高興這工作得很好! – DWright

0

你可以設置一個變量,你讓你的查詢像以前一樣......

$first_five = substr($text, 0, 5); 

然後使用

INSERT INTO auto_bulk(heading,content)VALUES($first_five,$text); 

或更直接的方法,假設你預先分配$ text變量:

INSERT INTO auto_bulk(heading,content)VALUES(substr($text, 0, 5) , $text); 
+1

這是不是「直接在mysql中」,如問 –

+0

@Devon感謝朋友a已經知道這一點,我只是想與它做只有mysql – vinu

+0

@vinu:哦,對不起,我錯讀了這個問題;有時我爲了自己的利益而讀得太快,並做出假設。 –

1

創建BEFORE INSERT觸發這樣的:

DELIMITER $$ 

CREATE TRIGGER auto_bulk_trigger1 
    BEFORE INSERT 
    ON auto_bulk 
    FOR EACH ROW 
BEGIN 
    SET NEW.heading = LEFT(NEW.content, 5); 
END 
$$ 

DELIMITER ; 

然後只插入內容:

INSERT INTO auto_bulk(content) VALUES('Helloworld123');