2014-01-14 2 views
1
mysql> select * from Teams; 
+-----------+---------+ 
| team_name | team_id | 
+-----------+---------+ 
| India  |  1 | 
| England |  2 | 
| Germany |  3 | 
| Italy  |  4 | 
| Spain  |  5 | 
| Belgium |  6 | 
| Brazil |  7 | 
| France |  8 | 
+-----------+---------+ 
8 rows in set (0.00 sec) 


select * from Players where team_id=7 or team_id=8; 
+-----------+----------------+------------+------+--------+--------+---------+ 
| player_id | player_name | position | age | height | weight | team_id | 
+-----------+----------------+------------+------+--------+--------+---------+ 
|  130 | Jefferson  | Goalkeeper | 25 |  6 |  90 |  7 | 
|  131 | Dani Alves  | Defender | 30 |  6 |  65 |  7 | 
|  132 | David Luiz  | Defender | 26 |  6 |  73 |  7 | 
|  133 | Thiago Silva | Defender | 29 |  6 |  69 |  7 | 
|  134 | Marcelo  | Defender | 24 |  5 |  65 |  7 | 
|  135 | Paulinho  | Midfielder | 27 |  6 |  68 |  7 | 
|  136 | Ramires  | Midfielder | 25 |  6 |  59 |  7 | 
|  137 | Oscar   | Midfielder | 21 |  5 |  61 |  7 | 
|  138 | Lucas Moura | Striker | 19 |  5 |  62 |  7 | 
|  139 | Neymar   | Striker | 21 |  5 |  63 |  7 | 
|  140 | Alex Pato  | Striker | 25 |  6 |  69 |  7 | 
|  150 | Hugo Lloris | Goalkeeper | 28 |  6 |  75 |  8 | 
|  151 | Mathiu Debuchy | Defender | 25 |  6 |  70 |  8 | 
|  152 | Philip Mexes | Defender | 34 |  6 |  73 |  8 | 
|  153 | Younes Kaboul | Defender | 29 |  6 |  81 |  8 | 
|  154 | Patrice Evra | Defender | 34 |  6 |  75 |  8 | 
|  155 | Paul Pogba  | Midfielder | 21 |  6 |  68 |  8 | 
|  156 | Samir Nasri | Midfielder | 27 |  6 |  69 |  8 | 
|  157 | Yohan Cabaye | Midfielder | 26 |  6 |  64 |  8 | 
|  158 | Frank Ribery | Striker | 28 |  5 |  63 |  8 | 
|  159 | Oliver Giroud | Striker | 25 |  6 |  74 |  8 | 
|  160 | Karim Benzema | Striker | 24 |  6 |  71 |  8 | 
+-----------+----------------+------------+------+--------+--------+---------+ 
22 rows in set (0.00 sec) 



mysql> select * from Matches where match_id=4; 
+----------+------------+----------+----------+-----------+-----------+ 
| match_id | match_date | hometeam | awayteam | homescore | awayscore | 
+----------+------------+----------+----------+-----------+-----------+ 
|  4 | 2014-06-28 |  7 |  8 |   0 |   0 | 
+----------+------------+----------+----------+-----------+-----------+ 
1 row in set (0.00 sec) 

(hometeam, awayteam являются внешними ключами Teams.team_id)как обновить таблицу, если значения в другой таблице вставляется

mysql> select * from livescore; 
+----------+-----------+----------+---------+ 
| score_no | player_id | match_id | team_id | 
+----------+-----------+----------+---------+ 
|  1 |  155 |  4 |  8 | 
+----------+-----------+----------+---------+ 
1 row in set (0.00 sec) 

(player_id,match_id,team_id are foreign keys of Players,Matches,Teams) У меня есть Players таблицу, где у меня есть все данные игроков.

То, что я хочу, это когда новая строка вставлена ​​в 'livescore', необходимо соответственно увеличить homescore,awayscore. т.е. Если игрок принадлежит к team_id=8 в livescore, то awayscore, где awayteam=8 должен быть увеличен +1.

+1

Возможно, это работает для http://dev.mysql.com/doc/refman/5.0/en/create-trigger.html :) – Pavel

ответ

0

Существует маленькая хитрость с, что вы можете сделать это в одном запросе с помощью ПО дубликатом ключа конструкции:

INSERT INTO `table` (`field_a`, `field_b`, `field_c`) 
VALUES('val_a', 'val_b', 'val_c') 
ON DUPLICATE KEY UPDATE `field_c` = `field_c` + 1; 

Дубликат ключа будет автоматически использоваться в качестве WHERE при использовании «ON DUPLICATE KEY», так что это очень комфортно.

Имейте в виду, что строка или по крайней мере один ключ, который вы пытаетесь вставить, должен быть первичным или уникальным индексом, который отрицает повторяющиеся записи, чтобы эта конструкция работала.

+0

Возможно ли обновить существующую строку вместо того, чтобы вставлять новую с указанным выше кодом. @ Steini – hotspur27

+0

Для этого вам следует подумать о создании триггера, как сказал Павел в своем комментарии. С помощью триггера вы можете дать таблице предопределенное поведение, например, когда поле обновляется, вы можете выполнить собственный код, например, вставить или обновить в другую таблицу. Однако вы уверены, что хотите получить две таблицы забитых очков? Не можете ли вы создать один столбец в таблице livecore сразу для каждого типа оценки? – Steini

Смежные вопросы