2017-03-28 7 views
1

現在、私は基本的にポストイットノートを作成できるアプリケーションを作成しています。私はそれのための私のSQLテーブルを作ることに取り組んでいます。私がしたいのは、テーブルのデータを日付で検索できるようにすることです。 1日に複数の投稿を作成することは明らかです。だから私は別のテーブルに日付を入れています。それはそれを行うことが可能かどう私は思ったんだけどは、その日のテーブル上の日付列は、それが自動インクリメントIDと現在の日付で新しい列を作成日付を変更したときに更新されるSQLテーブルの作成方法

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

それはSQLコードですか?私はおそらく私は間違っているSQLサーバーのコードタグを削除しました。正しい構文でないか、これが別のタイプのSQLであることを意味しますか?これは、私のデータベースと通信するためにPGAdminとPostgresと通信するために書いたものの典型です。 –

+0

タグ 'sql-server'タグは、Postgresとは非常に異なる何かのデータベース製品" Microsoft SQL Server "を参照しています。 –

+1

私は別のテーブルに日付を持つのは良い考えだとは思わない。 'timestamp'型の' created_at'( 'time'が不要な場合は' date')という列を 'ideas'テーブルに追加するだけです。そして:** never **、_ever_はvarcharとして日付を格納します。 **決して**。ちょうどしないでください –

答えて

0

TRIGGER手順を使用することをおすすめします。 ideasテーブルに挿入するたびに関数をトリガできます。この関数はdatesテーブルをチェックして、そこに現在の日付が存在することを確認できます。 ideasテーブルのdate_id列にその日付の新しい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(); 

これはideasに挿入するときにdate_idを省略することができます。これを省略すると、トリガーによって今日の日付のIDに自動的に設定されます。

INSERT INTO ideas (ideas) VALUES ('sup dudeee'); 

私は私の答えに組み込まれたいくつかの他のフィードバック:

  • VARCHARとして日付を格納しないでください、それはあまり効率的で、より面倒です。代わりにDATEを使用してください。
  • Postgresで予約語の後にテーブルの名前を付けないでください。 dateではなく、datesと名前を付けます。
関連する問題