2017-02-21 22 views
0

私はスポーツの得点と順位を持つデータベースを持っています。私は次の試合のためにResult6に「W」を追加したときに今、私はそう...2番目のテーブルに入力された値に基づいてMYSQLテーブルを更新します

Team  Overall Record Conference Record 
Team1 5-0    2-0 
Team2 4-1    1-1 
Team3 3-2    0-2 

のような順位表を持っていると私はゲームのために結果表を持っている...

Team Result1 Result2 Result3 Result4 Result5 Result6 
Team1 W  W   W  W   W 
Team2 W  L   W  W   W 
Team3 W  L   L  W   W 

順位表の6-0にTeam1レコードを更新する方法があるのですか、それとも "L"なら5-1に変更しますか?

+0

本当に必要なデータ構造改善する。異なる列に結果を格納することは、繰り返しデータを格納するSQL的な方法ではありません。 –

+0

代わりに勝利、敗北、トータルゲームを持ってみませんか? – r0xette

答えて

0

あなたはテーブル構造が悪いですし、私も悪いオファーがあります!

SET @teamname := 'team1'; 

SELECT @myres := concat(Result1,Result2,Result3,Result4,Result5,Result6) -- and other columns 
FROM results 
WHERE team = @teamname; 

UPDATE sports_score 
SET overal = concat(
     length(@myres)-length(replace(@myres,'W','')) 
,'-', 
     length(@myres)-length(replace(@myres,'L','')) 
) 
WHERE team = @teamname ; 
0

この方法では、名前を持っている "triggers"。 AFTER UPDATEがあなたのケースに合っているようです。

他にも示唆されているように、DBデザインは完璧ではありません。

基本的に、@ r0xetteは優秀な提案をしました:あなたの「順位表」テーブルで勝ち、敗北を守ってください。その後、あなたのトリガーによって行われた更新で適切な列を増やしてください。以前の値と "ゲーム"テーブルの列/レコードの全体のセットをあなたの "記録"のペアを計算するためにあなたはSELECT時にそれを行うでしょう:

SELECT concat(win, ' - ', loss) AS OverallRecord FROM standings WHERE team = 'team1'; 
関連する問題