目前我正在创建一个基本上可以创建便利贴的应用。我正在为它制作我的SQL表。我想做的是使表格数据按日期可搜索。显然可以在一天内发布多个帖子。所以我把日期放在一个单独的表中。我想知道的是,是否有可能使日期表上的日期列不是当前日期,它将自动增加Id并创建一个具有当前日期的新列
CREATE TABLE IF NOT EXISTS ideas (
id SERIAL PRIMARY KEY,
ideas text,
date_id int );
CREATE TABLE IF NOT EXISTS date (
id SERIAL PRIMARY KEY,
table_date CONVERT(VARCHAR(15), GETDATE(),10));
到目前为止,我的代码是否有任何建议,欢迎提出所有建议!
答案 0 :(得分:0)
我建议使用TRIGGER
程序。每次在ideas
表上进行插入时,都可以触发函数。此函数可以检查dates
表并确保当前日期存在。它甚至可以在date_id
表的ideas
列中设置该日期的新ID。
例如:
DROP TABLE IF EXISTS ideas;
CREATE TABLE ideas (
id SERIAL PRIMARY KEY,
ideas text,
date_id int
);
-- "date" is a reserved word. try to avoid naming a table "date".
DROP TABLE IF EXISTS dates;
CREATE TABLE dates (
id SERIAL PRIMARY KEY,
table_date DATE DEFAULT NOW() -- i would recommend the DATE type here
);
DROP TRIGGER IF EXISTS insert_date_if_absent ON ideas;
DROP FUNCTION IF EXISTS insert_date_if_absent();
CREATE FUNCTION insert_date_if_absent()
RETURNS TRIGGER
AS $$
DECLARE
today date := now();
new_date_id integer;
BEGIN
IF NOT EXISTS (SELECT * FROM dates WHERE table_date = today) THEN
INSERT INTO dates (table_date) VALUES (today) RETURNING id INTO new_date_id;
ELSE
SELECT id FROM dates WHERE table_date = today INTO new_date_id;
END IF;
IF NEW.date_id IS NULL THEN
NEW.date_id := new_date_id;
END IF;
RETURN NEW;
END
$$ LANGUAGE PLPGSQL;
CREATE TRIGGER insert_date_if_absent
BEFORE INSERT ON ideas
FOR EACH ROW
EXECUTE PROCEDURE insert_date_if_absent();
这将允许您在插入date_id
时省略ideas
。如果省略,它将由触发器自动设置为今天的日期ID。
INSERT INTO ideas (ideas) VALUES ('sup dudeee');
我在答案中加入了一些其他反馈:
VARCHAR
,效率更低,更麻烦。请改用DATE
。date
,而是将其命名为dates
。