PHP MYSQL Ekle / Güncelle

2 Cevap php

Ben aşağıdaki gibi basit bir tablo var.

CREATE TABLE `stats` (
  `id` int(11) NOT NULL auto_increment,
  `zones` varchar(100) default NULL,
  `date` date default NULL,
  `hits` int(100) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;

Yani sadece depolama basit tıklama günde bölge başına karşı.

Ama sadece aynı gün için hit değerini artırmak istiyoruz.

Ben onları benzersiz veya tarih yapamazsınız bu yüzden farklı tarihlerde birçok bölgeleri olabilir gibi MYSQL YİNELENEN KEY GÜNCELLEME ama bu alışkanlık işi denedim.

Yani bence tek yolu bir tarih olup olmadığını görmek için bir sorgu yapmak için ilk sonra ekleme / güncelleştirme için basit) (varsa yapmak

Belki günde kaç 1000 hits olmak gibi bir görev yaptığını kendi daha iyi bir yoludur.

Bu :-) mantıklı umuyoruz.

Ve teşekkürler tavsiye edebilir.

2 Cevap

CREATE deyimi gibi benzersiz tuple (zone, date) bildirin. Beklendiği gibi bu YİNELENEN GÜNCELLEME çalışma ON ... INSERT yapacak:

CREATE TABLE `stats` (
  `id` int(11) NOT NULL auto_increment,
  `zone` varchar(100) default NULL,
  `date` date default NULL,
  `hits` int(100) default NULL,
  PRIMARY KEY  (`id`),
  UNIQUE (`zone`, `date`)
) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;

INSERT INTO stats (zone, date, hits) values ('zone1', 'date1', 1) ON DUPLICATE KEY UPDATE hits = hits + 1;
$result = mysql_query("SELECT id FROM stats WHERE zone=$zone AND date=$today LIMIT 1");
if(mysql_num_rows($result)) {
    $id = mysql_result($result,0);
    mysql_query("UPDATE stats SET hits=hits+1 WHERE id=$id");
} else {
    mysql_query("INSERT INTO stats (zone, date, hits) VALUES ($zone, $today, 1)");
}

Seni doğru yorumlanır ettik eğer böyle bir şey ... bu tamamen denenmemiş bulunuyor. Sen değişkenlerin ne anlamaya olabilir.