Je suis relativement confus au sujet de cette ...champ de mise à jour MySQL sur insert si un autre champ (non clé) a changé
J'ai une table comme:
+----------------+--------------------------------------------------+------+-----+-------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+--------------------------------------------------+------+-----+-------------------+-----------------------------+
| dhcp | int(10) unsigned | NO | PRI | 0 | |
| ip | int(10) unsigned | NO | PRI | 0 | |
| mac | varchar(17) | YES | MUL | NULL | |
| lease | enum('fr','a','fi','a','u') | NO | MUL | free) | | |
| date | timestamp | NO | MUL | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
| uid | varchar(255) | YES | | NULL | |
| starts_date | datetime | YES | | NULL | |
| starts_weekday | tinyint(1) | YES | | NULL | |
| ends_date | datetime | YES | | NULL | |
| ends_weekday | tinyint(1) | YES | | NULL | |
| first_seen | datetime | YES | | NULL | |
+----------------+--------------------------------------------------+------+-----+-------------------+-----------------------------+
Je viens d'ajouter le first_seen colonne. L'idée est que je vais utiliser INSERT ... SUR DUPLICATE KEY UPDATE. dhcp
et ip
sont à juste titre les clés primaires, comme je veux seulement avoir un enregistrement pour eux à la fois. Donc si mac
change, il devrait mettre à jour la ligne existante s'il en existe une pour cette combinaison dhcp, ip.
cependant, je veux avoir first_seen mis à jour chaque fois une combinaison (ip, dhcp, mac) est vu ... à savoir si la valeur des changements « mac », je veux mettre à jour first_seen. Si la valeur de 'mac' reste la même, je veux laisser first_seen la même chose.
est-il un moyen simple de faire cela dans SQL ... à savoir un IF() ou quelque chose? ou dois-je gérer cela avec un autre SELECT dans le script PHP (en gardant à l'esprit que nous sommes en train d'analyser un fichier pour obtenir ces données, et en insérant environ 10-16k lignes, donc le temps est un facteur).
Merci, Jason