0

投票テーブルに 5 つの MySQL データ フィールドがあります。

  • 投稿ID
  • 投票ID
  • 投票ID
  • 有権者
  • 投票した

アンケートに投票したり、投稿に投票したりできます。投票で投票すると、投稿/人物フィールドは null になります。投稿に投票すると、投票フィールドは null になります。

投稿IDまたは投票IDのいずれかをnullにできるようにテーブルを設定したいのですが、両方はできません。phpmyadmin を使用してデータベースを管理しています。

何か案は?

4

2 に答える 2

2

上記の jmilloy に同意する必要があるのは、個別のテーブルを作成することです。これは、これがどのように機能するかの例です:

テーブル構造とサンプル データ:

CREATE TABLE post (
    post_id INT AUTO_INCREMENT PRIMARY KEY,
    vote_id INT
 );

CREATE TABLE poll (
    poll_id INT AUTO_INCREMENT PRIMARY KEY,
    vote_id INT
  );

CREATE TABLE voter(
  vote_id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(30)
  );

INSERT INTO post (vote_id) VALUES(1),(2),(3),(6);

INSERT INTO poll (vote_id) VALUES(3),(5),(4),(7);

INSERT INTO voter(name) VALUES ('bob'),
('Jack'),
('Joe'),
('Shara'), 
('Hillary'), 
('Steven'), 
('Sandra');

投稿に投票した有権者を取得するには、JOIN を使用する必要があります。これは、投稿番号 2 の投票者を見つけたい場合の例です。

SELECT post.post_id, vote.name  
FROM (post 
 JOIN post_vote 
ON post_vote.post_id = post.post_id) 
 JOIN vote 
ON vote.vote_id = post_vote.vote_id
WHERE post.post_id = 2;

SQL フィドルのデモ

投票と投票がある場合、多対多の関係がある場合の説明があります。つまり、1人の投票者が複数の投票に投票でき、1つの投票者が複数の投票者を持つことができます。投票テーブルと投票テーブルをブリッジするには、ブリッジ テーブルを使用します。このテーブルには、すべての投票数と投票の組み合わせが含まれています。したがって、特定の投票に誰が投票したかを知りたい場合は、poll_id を poll_vote テーブルの poll_id にリンクする必要があります。結果は、poll_vote テーブルと投票テーブルのvote_id を使用して、投票テーブルと照合されます。お役に立てれば。あなたのプロジェクトで頑張ってください。

于 2013-02-03T03:50:51.970 に答える
0

MySQL CREATE TABLE 構文を見てくださいhttp://dev.mysql.com/doc/refman/5.1/en/create-table.html

NOT NULL または NULL は列定義の一部であることに注意してください。デフォルトは NULL です。これは、列のペアではなく、列にのみ適用できます。

ここでの解決策は、2 つの別個のテーブルを作成することです。1 つは投稿票用で、もう 1 つは投票用です。次に、関連するフィールドを各テーブルに配置できます。これにより、スペースも節約され、データのエラーが発生しにくくなります。

于 2013-02-03T03:06:34.350 に答える