将每行数据库值与我自己的值进行比较

时间:2014-08-06 16:17:43

标签: php mysql database

我对某些事情感到有些困惑,我希望你们能帮助我解决这个问题,这是我能画的最好的比喻,以便更有意义:说数据库存储所有用户'篮球比赛的预测,所以列可能是

id, user, homeTeamScore, visitingTeamScore, pointTotal

我怎么能首先看到他们是否预测homeTeamScorevisitingTeamScore完全正确,如果不是这样,他们是否正确预测了胜利者(即看他们的homeTeamScore - awayTeamScore> 0 in主队取得胜利的情况)。另外,我怎样才能增加pointTotal(基于第一种情况,我根据第二种情况增加它,因为它是更准确的预测)。

对不起,如果我不清楚的话。如果是这样的情况让我知道,我会尝试重申它。显然,由于我的问题的性质,我不是在寻找非常具体到我问题的答案;一些用于比较数据库值的SQL查询/ PHP代码结构将有很大帮助。再次感谢。

编辑:我真的希望我可以选择你的答案,或者至少赞同他们两个,但唉,我没有15点声望。它完全符合我的要求,所以我感谢你们!

2 个答案:

答案 0 :(得分:0)

您将使用CASE或IF。

在这些例子中,我假设主队得分为98而客队得分为95分。正确得到10分,否则为5分。

CASE语法:

UPDATE predictions SET pointTotal = CASE WHEN homeTeamScore = 98 AND visitingTeamScore = 95 THEN 10 ELSE 5 END

IF语法:

UPDATE predictions SET pointTotal = IF(homeTeamScore = 98 AND visitingTeamScore = 95, 10, 5)

您还可以(a)嵌套条件和(b)使用表达式而不是硬编码点数。例如:

UPDATE predictions SET pointTotal = 
  IF(homeTeamScore = 98 AND visitingTeamScore = 95, 
    10, 
    IF(homeTeamScore > visitingTeamScore, 
      GREATEST(1, 5-ABS((homeTeamScore - visitingTeamScore)-(98-95)), 
      0
    )
  )

在这个例子中,你得到10分是完全正确的,得到0分用于预测客队将获胜,从1到5用于预测主队赢了(确切得分是根据你的传播计算的预测与实际传播相比)。

答案 1 :(得分:0)

考虑以下内容......

  DROP TABLE IF EXISTS my_table;

  CREATE TABLE my_table
  (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
  ,user VARCHAR(12) NOT NULL
  ,home_score INT NOT NULL
  ,away_score INT NOT NULL
  );

  INSERT INTO my_table (user,home_score,away_score) VALUES
  ('Alice',104,87),
  ('Ben',86,107),
  ('Charlie',92,111),
  ('Dave',96,98),
  ('Ellen',110,95);

让我们说克罗伊登的飞行员被伊灵鹰队击败他们的主场,92比111 ......

  SELECT *
       , CASE WHEN (home_score,away_score)  = (92,111) THEN 3 
              WHEN home_score < away_score THEN 2 
              ELSE 0 
              END points 
    FROM my_table;
  +----+---------+------------+------------+--------+
  | id | user    | home_score | away_score | points |
  +----+---------+------------+------------+--------+
  |  1 | Alice   |        104 |         87 |      0 |
  |  2 | Ben     |         86 |        107 |      2 |
  |  3 | Charlie |         92 |        111 |      3 |
  |  4 | Dave    |         96 |         98 |      2 |
  |  5 | Ellen   |        110 |         95 |      0 |
  +----+---------+------------+------------+--------+