2011-12-31 9 views
0

このクエリの作成に問題があります。私は2つのテーブル、vote_tableとclick_tableを持っています。私は2つのフィールド、IDと日付を持っています。日付の形式は「12/30/11:14:28:36」です。 click_tableには私は2つのフィールド、IDと日付があります。日付の形式は "12.30.11"です。特定のSQLクエリの問題

IDは、両方のテーブルで複数回発生します。私がしたいことは、id、votes、clicksの3つのフィールドを含む結果を生成することです。 id列には別個のid値が必要です。votes列には、IDに投票表から12/30/11%の合計時間が必要です。クリックには、IDの日付から12.30.11までの合計時間が必要です。テーブルをクリックし、ので、このような何か:

ID | VOTES | CLICKS 

001 | 24 | 50 

002 | 30 | 45 
+0

ここには誰もがっかりだよ。 – user1123934

+0

@JonathanLefflerそのコメントにはちょっとした毒があった。それは少し不必要なようです。これは、人々が助けを得るために来る場所で、これ以上よく分からない人です。まともでないか、コメントしないでください。 –

+0

おそらくそうではありません。しかし、あなたはあなたのテーブルについての重要な詳細を教えてくれませんでした。また、日付値にVARCHARを使用することは深刻な問題です。 –

答えて

0

「日付」列の型が実際に(というVARCHAR、たとえば、より)のいずれかDATEまたはDATETIMEあると仮定すると、次に必要な操作は非常に単純明快です。これが唯一のID値を示すこと

SELECT v.id, v.votes, c.clicks 
    FROM (SELECT id, COUNT(*) AS votes 
      FROM vote_table AS v1 
     WHERE DATE(v1.`date`) = TIMESTAMP('2011-12-30') 
     GROUP BY v1.id) AS v 
    JOIN (SELECT id, COUNT(*) AS clicks 
      FROM click_table AS c1 
     WHERE DATE(c1.`date`) = TIMESTAMP('2011-12-30') 
     GROUP BY c1.id) AS c 
    ON v.id = c.id 
ORDER BY v.id; 

注れる少なくとも一票と与えられた日の少なくとも一つのクリックがあります。あなたが投票した、またはクリックした、またはその両方のID値をすべて表示する必要がある場合は、より多くの作業を行う必要があります。

日付がVARCHAR列であるため、日付を正規化する必要がある場合、WHERE句は対応して複雑になります。

+0

このエラーが発生しました: 'id'ヌル。私はIDのフィールドのカップルがNULLだと思うが、そのための迅速な修正ですか? – user1123934

+0

私はちょうど欠けているGROUP BY句を追加しました。それぞれのテーブルにプライマリキーがあることを確認してください。列にNULL制約がないことを確認してください。問題の繰り返しを防ぐために、テーブルを変更する前に 'WHERE id IS NULL'行を削除してください。常にその列にNULLを許可する特別な理由がない限り、すべての列に「NOT NULL」制約を含めます。 –

+0

私はそれを実行し、正常に実行されましたが、何も返されませんでした。これが重要だが、idフィールドがプライマリではなく、一意ではないかどうかはわかりません。複数のidsがあります... id 001が今日3回投票した場合、001、2011-12-30と言う3行になります。私は両方のテーブルの各IDのすべてをカウントアップしようとしています。 – user1123934