2

に私は次のクエリを持っています。 ここでocc_dateservice_taguniqueフィールドです。プライマリキーを両方の固有フィールドに設定することはできません。MySQLはユニークなフィールドの両方が一致するだけDUPLICATE KEY UPDATE、他のINSERT

私は次のことを実行しました:

ALTER TABLE occ_apps 
DROP PRIMARY KEY, 
ADD PRIMARY KEY (occ_date, service_tag); 

そして、私は取得するには、エラー:

`#1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key` 

が、私はそれが(増分)を更新したいocc_dateservice_tag両方の一致が(すでに存在しているだけカウンタ)を1行に挿入します。そうでない場合は、新しい行を挿入する必要があります。

Software version: 5.5.53-MariaDB-1~wheezy - mariadb.org binary distribution

私はDESC occ_appsを実行したとき、私は得る:

Field   Type   Null  Key  Default  Extra 

serial_no  int(255)  NO   PRI  NULL   auto_increment 
occ_date  varchar(255) NO   UNI  NULL   
counter   int(255)  NO     NULL  
service_tag  varchar(255) YES   UNI  NULL  

助けてください!

+0

「一意キーを追加する(occ_date、service_tag)」これはあなたに役立つでしょう。 –

+0

'desc occ_apps'結果を共有できますか? –

+0

@ KeyurShahは常に代わりにSHOW CREATE TABLEを要求することをお勧めします – e4c5

答えて

1

私はあなたのテーブルにカウンタフィールドが必要ではないと思います。あなたのカウンターは単に与えられた価値が何回起こったのかを把握しているようです。そして、それは

SELECT occ_date, COUNT(*) FROM occ_apps GROUP BY `occ_date`; 

BY GROUPを使用して容易に生成することができるものですので、あなたは、少なくとも5つのカウントのアイテムのみを取得するようにクエリをフィルタ処理したいですか?

SELECT occ_date, COUNT(*) FROM occ_apps WHERE service_tag = 'service-1' 
GROUP BY `occ_date` HAVING COUNT(*) > 5 

問題のこれらの種類は、GROUP BYを使用して数百万回を解決してきました。これは、SQLクエリーの集約ができる限り、アイスバーゼルの先端にすぎません。それを読んでください。

+0

フェッチ中に、 'counter'> 5' AND'' service_tag' = 'service-1'のところで' occ'date'を 'SELECT'する必要があります。そのため、同じ日付と同じサービス、つまり 'occ_date'と' service_tag'が両方ともすでに単一の行に存在する場合のみ、 'INSERT'新しい行に' counter 'をインクリメントする必要があります。 –

+0

はい、あなたはまだグループを探しています – e4c5

+0

ありがとう、それは期待どおりに働いた、私はこのようにもできることを私は知らなかった。あなたの忍耐と努力に感謝します!あなたのビジネスはすぐに成長します! –

関連する問題