lostyazilim
tr.link

mysql varsa güncelle yoksa yeni kayıt aç nasıl yapabilirim

13 Mesajlar 4.249 Okunma
lstbozum
tr.link

sercancantank sercancantank ¿sɹǝʇ nq ʞǝʇ ɹıq ;ɐp apun Kullanıcı
  • Üyelik 25.06.2016
  • Yaş/Cinsiyet 36 / E
  • Meslek Şoför
  • Konum İzmir
  • Ad Soyad S** C**
  • Mesajlar 9
  • Beğeniler 0 / 0
  • Ticaret 0, (%0)
Öncelikle herkese merhaba.

Projemden az buçuk bahsetmek istiyorum bir sistemde profil ziyaretçileri yaptım fakat her girişinde aynı kaydı devam ettiryor örnek verirsek tablodan

id - izyaret eden - ziyaretçi - ziyaret tarihi

1 30 2 ziyaretsaati
2 30 2 ziyaretsaati
3 30 2 ziyaretsaati
4 30 2 ziyaretsaati


ben bunun bu şekilde olmasını istemiyorum

misal 30 idli kullanıcı 2 idli kullancııyı ziyaret ettiğinde kontrol etsin daha önce bu şekilde bir kayıt olmuşmu eğer olmuşsa dsadece ziyaret saatini güncellesin ama baktıki kayıt yok yeni kayıt oluştursun bunu nasıl yapabilirim bana yardımcı olabilir misiniz.
 

 

Hepiniz aklınızı çıldırmışsınız.
wmaraci
reklam

vkonca vkonca WM Aracı Kullanıcı
  • Üyelik 12.08.2013
  • Yaş/Cinsiyet 28 / E
  • Meslek Web Developer
  • Konum Tekirdağ
  • Ad Soyad V** K**
  • Mesajlar 294
  • Beğeniler 73 / 63
  • Ticaret 0, (%0)
ip adresini al eğer varsa ip adresi güncellettir
 

 

VBA Developer

hsntngr hsntngr Kontör at Kullanıcı
  • Üyelik 21.09.2016
  • Yaş/Cinsiyet 31 / E
  • Meslek Full Stack Developer
  • Konum İstanbul Avrupa
  • Ad Soyad H** T**
  • Mesajlar 1155
  • Beğeniler 99 / 327
  • Ticaret 3, (%100)

vkonca adlı üyeden alıntı

ip adresini al eğer varsa ip adresi güncellettir


Kşi başka aygıtlardan girebilir, işyerinden vs evden girebilir hocam bir çözüme ulaştırmıyor sanırım ip adresi.

on dublicate veya replace deseniz yine olmaz, iki koşul var.

Bana makul gelen iki query oluşturmak biri kontrol için diğeri ise update/create için.

İlk önce bir read sorgusu atarsınız. WHERE ziyaret_eden = 30 AND ziyaret_edilen = 2 der, böyle bir kayıt var mı yok mu ona bakarsınız..

daha sonra ilk sorgudan gelen veriyi kontrol edersiniz, eğer böyle bir kayıt varsa update, yoksa create işlemi yaparsınız.

Tek queryde yapılabilir mi bilmiyorum düşünmek lazım, şu an aklıma böyle bir çözüm geldi benim.
 

 

aydmem aydmem WM Aracı Kullanıcı
  • Üyelik 02.11.2014
  • Yaş/Cinsiyet 38 / E
  • Meslek bilgisayar mühendisi
  • Konum İstanbul Anadolu
  • Ad Soyad A** A**
  • Mesajlar 57
  • Beğeniler 20 / 10
  • Ticaret 0, (%0)
exists komutu ile kontrol edebilirsin
SELECT *
FROM customers
WHERE EXISTS (SELECT *
FROM order_details
WHERE customers.customer_id = order_details.customer_id);

daha önce ziyaret edilmemişse kodu çalıştır yoksa çalıştırma şeklinde kodunu düzenleyebilirsin.
https://www.techonthenet.com/mysql/exists.php
 

 

wmaraci
wmaraci

sercancantank sercancantank ¿sɹǝʇ nq ʞǝʇ ɹıq ;ɐp apun Kullanıcı
  • Üyelik 25.06.2016
  • Yaş/Cinsiyet 36 / E
  • Meslek Şoför
  • Konum İzmir
  • Ad Soyad S** C**
  • Mesajlar 9
  • Beğeniler 0 / 0
  • Ticaret 0, (%0)
o zaman yine else if ile çözücez mevzuyu
 

 

Hepiniz aklınızı çıldırmışsınız.

sercancantank sercancantank ¿sɹǝʇ nq ʞǝʇ ɹıq ;ɐp apun Kullanıcı
  • Üyelik 25.06.2016
  • Yaş/Cinsiyet 36 / E
  • Meslek Şoför
  • Konum İzmir
  • Ad Soyad S** C**
  • Mesajlar 9
  • Beğeniler 0 / 0
  • Ticaret 0, (%0)

hsntngr adlı üyeden alıntı

Kşi başka aygıtlardan girebilir, işyerinden vs evden girebilir hocam bir çözüme ulaştırmıyor sanırım ip adresi.

on dublicate veya replace deseniz yine olmaz, iki koşul var.

Bana makul gelen iki query oluşturmak biri kontrol için diğeri ise update/create için.

İlk önce bir read sorgusu atarsınız. WHERE ziyaret_eden = 30 AND ziyaret_edilen = 2 der, böyle bir kayıt var mı yok mu ona bakarsınız..

daha sonra ilk sorgudan gelen veriyi kontrol edersiniz, eğer böyle bir kayıt varsa update, yoksa create işlemi yaparsınız.

Tek queryde yapılabilir mi bilmiyorum düşünmek lazım, şu an aklıma böyle bir çözüm geldi benim.


bunu nasıl yapabilirm bana yardımcı olabilir misiniz?
 

 

Hepiniz aklınızı çıldırmışsınız.

MyYafes MyYafes Developer Kullanıcı
  • Üyelik 05.03.2015
  • Yaş/Cinsiyet 26 / E
  • Meslek Full-Stack Web Developer
  • Konum Ankara
  • Ad Soyad M** M**
  • Mesajlar 25
  • Beğeniler 0 / 7
  • Ticaret 0, (%0)
Merhaba, öncelikle iyi çalışmalar mantığı anlaman açısından bir örnek yaptım. Kodlar içerisinde notlar yazdım. Takıldığın yerde yine sorabilirsin. Aşağıda yaptığım örnekte bir günde bir kez yapılan ziyateri sayacaktır. Cihaz, IP, Tarayıcı, vb.. faktörlerden etkilenmez doğru bir sayım olur.


// Şimdi bunun örneğini senin için php PDO ile yapıyorum. Mantığı anlarsın umarım...
/*
$query->$db ile başlayan $db değişkenim ben veri tabanı bağlantı
değişkeni olarak belirledim seninki ne ise onunda değiştirebilirsin.

*/
$ziyaretci_id = 1; // Profile giren kullanıcının idsi.
$ziyaret_edilen_id = 15; // Profilin sahibinin idsi.
$tarih = date("Y-m-d"); // Tarih formatı: 2018-12-5 olacaktır.

$query = $db->prepare("SELECT * from ziyetler WHERE ziyaretci=? && ziyaret_edilen_id=? && tarih=?");
$query->execute(array($ziyaretci_id,$ziyaret_edilen_id,$tarih));
if ($query->rowCount() >= 1) {

// Sorgu yaptık buradan eğer bu gün kullanıcı bu profili daha önce ziyaret etmiş ise güncelliyoruz.
// Burada biz saatlik bir dilim kullanmadık günlük kullandığımız için aynı gün yapılan ziyareti
// aslında güncellemek mantıklı değil fakat saatlik kullanırsan diye bu alanı bırakıyorum.
$query = $db->prepare("UPDATE ziyaretler SET tarih=? WHERE ziyaretci_id=? && ziyaret_edilen_id=?");
$update = $query->execute(array($tarih,$ziyaretci_id,$ziyaret_edilen_id));
if ($update) {
echo 'Son Ziyaret güncellendi.';
}

} else {

// Eğer birisi bu profili daha önce ziyaret etmiş ise ekliyoruz.

$query = $db->prepare("INSERT INTO ziyaretler SET ziyaretci_id=?,ziyaret_edilen_id=?,tarih=?");
$insert = $query->execute(array($ziyaretci_id,$ziyaret_edilen_id,$tarih));
if ($insert) {
echo 'Son Ziyaret eklendi.';
}

}

// Bu örnekte bir kullanıcı bir başka kullanıcıyı günde sadece bir ziyaretini sayar sayfa yenilemesi ip değişikliği cihaz değişikliği gibi faktörlerden etkilenmeden tekil ziyaretçi sayımı yapmış oluruz.
?>
 

 

hsntngr hsntngr Kontör at Kullanıcı
  • Üyelik 21.09.2016
  • Yaş/Cinsiyet 31 / E
  • Meslek Full Stack Developer
  • Konum İstanbul Avrupa
  • Ad Soyad H** T**
  • Mesajlar 1155
  • Beğeniler 99 / 327
  • Ticaret 3, (%100)
Yukarıda MyYafes hocam güzel bir şekilde açıklamış, o yüzden ben pas geçiyorum, kolay gelsin hocam :)

Bu arada MyYafes hocam sanırım OP birebir kayıt aramıyor. ziyaret eden ve edilen id lerin uyuşması yeterli, eğer bir ziyaret varsa tarihini güncellemek istiyor.
 

 

sercancantank sercancantank ¿sɹǝʇ nq ʞǝʇ ɹıq ;ɐp apun Kullanıcı
  • Üyelik 25.06.2016
  • Yaş/Cinsiyet 36 / E
  • Meslek Şoför
  • Konum İzmir
  • Ad Soyad S** C**
  • Mesajlar 9
  • Beğeniler 0 / 0
  • Ticaret 0, (%0)

MyYafes adlı üyeden alıntı

Merhaba, öncelikle iyi çalışmalar mantığı anlaman açısından bir örnek yaptım. Kodlar içerisinde notlar yazdım. Takıldığın yerde yine sorabilirsin. Aşağıda yaptığım örnekte bir günde bir kez yapılan ziyateri sayacaktır. Cihaz, IP, Tarayıcı, vb.. faktörlerden etkilenmez doğru bir sayım olur.


// Şimdi bunun örneğini senin için php PDO ile yapıyorum. Mantığı anlarsın umarım...
/*
$query->$db ile başlayan $db değişkenim ben veri tabanı bağlantı
değişkeni olarak belirledim seninki ne ise onunda değiştirebilirsin.

*/
$ziyaretci_id = 1; // Profile giren kullanıcının idsi.
$ziyaret_edilen_id = 15; // Profilin sahibinin idsi.
$tarih = date("Y-m-d"); // Tarih formatı: 2018-12-5 olacaktır.

$query = $db->prepare("SELECT * from ziyetler WHERE ziyaretci=? && ziyaret_edilen_id=? && tarih=?");
$query->execute(array($ziyaretci_id,$ziyaret_edilen_id,$tarih));
if ($query->rowCount() >= 1) {

// Sorgu yaptık buradan eğer bu gün kullanıcı bu profili daha önce ziyaret etmiş ise güncelliyoruz.
// Burada biz saatlik bir dilim kullanmadık günlük kullandığımız için aynı gün yapılan ziyareti
// aslında güncellemek mantıklı değil fakat saatlik kullanırsan diye bu alanı bırakıyorum.
$query = $db->prepare("UPDATE ziyaretler SET tarih=? WHERE ziyaretci_id=? && ziyaret_edilen_id=?");
$update = $query->execute(array($tarih,$ziyaretci_id,$ziyaret_edilen_id));
if ($update) {
echo 'Son Ziyaret güncellendi.';
}

} else {

// Eğer birisi bu profili daha önce ziyaret etmiş ise ekliyoruz.

$query = $db->prepare("INSERT INTO ziyaretler SET ziyaretci_id=?,ziyaret_edilen_id=?,tarih=?");
$insert = $query->execute(array($ziyaretci_id,$ziyaret_edilen_id,$tarih));
if ($insert) {
echo 'Son Ziyaret eklendi.';
}

}

// Bu örnekte bir kullanıcı bir başka kullanıcıyı günde sadece bir ziyaretini sayar sayfa yenilemesi ip değişikliği cihaz değişikliği gibi faktörlerden etkilenmeden tekil ziyaretçi sayımı yapmış oluruz.
?>


Merhaba öncelikle detaylı cevabınız için çok teşekkür ederim sadece merak ettiğim neden aslında güncellemek mantıklı değil fakat saatlik kullanırsan diye bu alanı bırakıyorum diye yazdınız mesela benim amacım ziyaretçi listesinde sıralama yaparken son ziyaret saatini ele almak yani kişi beş dk içinde 3 kerede profili ziyaret etse yeni kayıt açmaktansa varolan kaydın saatini güncellemek istiyorum
 

 

Hepiniz aklınızı çıldırmışsınız.

sercancantank sercancantank ¿sɹǝʇ nq ʞǝʇ ɹıq ;ɐp apun Kullanıcı
  • Üyelik 25.06.2016
  • Yaş/Cinsiyet 36 / E
  • Meslek Şoför
  • Konum İzmir
  • Ad Soyad S** C**
  • Mesajlar 9
  • Beğeniler 0 / 0
  • Ticaret 0, (%0)

hsntngr adlı üyeden alıntı

Yukarıda MyYafes hocam güzel bir şekilde açıklamış, o yüzden ben pas geçiyorum, kolay gelsin hocam :)

Bu arada MyYafes hocam sanırım OP birebir kayıt aramıyor. ziyaret eden ve edilen id lerin uyuşması yeterli, eğer bir ziyaret varsa tarihini güncellemek istiyor.


düşüncelerime tercüman olduğunuz için teşekkür ederim @hsntngr (:
 

 

Hepiniz aklınızı çıldırmışsınız.
Site Ayarları
  • Tema Seçeneği
  • Site Sesleri
  • Bildirimler
  • Özel Mesaj Al