Kodları lütfen aşağıdaki butonları kullanarak renklendirin. Örnek: <php> echo "Selam Dünya"; </php>
Yardım
karakter kaldı

Sql Uzmanı Baksın !!!!!

Merhabalar Arkadaşlar, mysql ile birşey yapmaya çalışıyorum ama birtürlü yapamadım
yapmak istediğim şey,
2 tane tablom war 1.si firmalar (burda id,firmaadı falan war)
2.si firmalar_hit (burda id,firma_id,gun,ay,yil,ip)
firma detya sayfası war bu sayfaya yıklayınca (yani firmaya tıklanınca ) bir sorgu yapıyor
sorgu: eğer bugün bu ip ile firma_hit tablosuna kayıtlı veri yoksa yenibir kayıt ekliyor firma_hit tablosuna günü ayı yılı ip adresini ve firmanın id sini ekliyor yani birgünde aynı ipli kişi kaç kere girerse girsin 1kere tabloya weri ekliyor. we ben anasayfada en çok hit alan firmaları çektirmek istiyorum ama bi mantığını kuramadım bunu nasl yapabilirim?

Tablo Yapılarım:


CREATE TABLE `firmalar` (
  `id` int(10) NOT NULL auto_increment,
  `firmaadi` varchar(500) NOT NULL,
  `eposta` varchar(200) NOT NULL,
  `kullaniciadi` varchar(200) NOT NULL,
  `sifre` varchar(80) NOT NULL,
  `md5sifre` varchar(50) NOT NULL,
  `sektor` varchar(80) NOT NULL,
  `altsektor` varchar(80) NOT NULL,
  `firmayetkilisi` varchar(300) NOT NULL,
  `resim` varchar(150) NOT NULL,
  `il` varchar(80) NOT NULL,
  `ilce` varchar(80) NOT NULL,
  `adres` text NOT NULL,
  `telefon` varchar(100) NOT NULL,
  `gsm` varchar(100) NOT NULL,
  `fax` varchar(100) NOT NULL,
  `website` varchar(500) NOT NULL,
  `firmatanitimi` text NOT NULL,
  `aramasonucu` varchar(500) NOT NULL,
  `kayittarihi` varchar(80) NOT NULL,
  `ip` varchar(80) NOT NULL,
  `video` varchar(300) NOT NULL,
  `hit` int(100) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=28 ;



CREATE TABLE `firma_hit` (
  `id` int(10) NOT NULL auto_increment,
  `firma_id` varchar(10) NOT NULL,
  `gun` varchar(80) NOT NULL,
  `ay` varchar(80) NOT NULL,
  `yil` varchar(80) NOT NULL,
  `ip` varchar(80) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ;


Yardımlarınız için şimdiden Teşekkür Ederim
+0
-2
Cevaba KatılıyorumKatılmıyorum
Cevap Yaz Yorum Yaz Arşivime Ekle Takip Et

Doğru Cevap

  • coderme adlı üyenin fotoğrafı
    10 yıl önce yazılmış
    12 cevap - 3 soru
    bu firma_hit tablosunu kaldır ve bunu yükle
    CREATE TABLE `firmahiti` (
      `gun` varchar(80) NOT NULL,
      `ay` varchar(80) NOT NULL,
      `yil` varchar(80) NOT NULL,
      `id` int(11) NOT NULL auto_increment,
      `hit_sayisi` int(11) NOT NULL,
      `firma_id` int(11) NOT NULL,
      `ip` varchar(25) NOT NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=8 ;
    



    döngüye sokacağın sorgunda bu.
    $sorgu = mysql_query("SELECT firmalar. * , SUM( hit_sayisi ) AS TOPLAM
    FROM firmahiti
    RIGHT JOIN firmalar ON firmalar.id = firmahiti.`firma_id`
    GROUP BY firmalar.id
    ORDER BY toplam DESC
    LIMIT 10 ");
    
    
    • sharq adlı üyenin fotoğrafı sharq
      cevabın için teşekkür ederim ama senin bu verdiğin tabloda şimdi firmaya ben girdiğimde bnm ip'm kayıt edilecek sonra sen girdiğinde snn ip'ni kabul edecek ve hit sayisini 1 arttıracak sonra ben aynı günde senden snra girince snn ipni görecek beni bugun hiç görmemiş gibi yapacak ve ben aynı gün içinde 2 kere veri tabanına kayıt ettrmiş olacağım.
      10 yıl önce yazılmış
    • ziyahan adlı üyenin fotoğrafı ziyahan
      Şunu dener misiniz?
      mysql_query("INSERT INTO firma_hit (firma_id,ip,gun,ay,yil) 
      select '$firma','$ip','$gun','$ay','$yil'  from firma_hit where not exist (select * from firma_hit where firma_id='$firma' and ip='$ip' and gun='$gun' and ay='$ay' and yil='$yil')");
      
      
      
      10 yıl önce yazılmış
    • sharq adlı üyenin fotoğrafı sharq
      sorun sorguda deil yani bu verdiğiniz kod galiba veritabanında hit sayfasında varmı yokmu diye sorgu yapıyor yoksa veri tabanına veri giriyor galiba yani bnm ypmak istediğim şey firma_hit tablosundaki firma_id değerlerivar mesela bugün 5 kişi aynı firmaya girmişşe

      |id|firma_id|gun|ay|yil |ip |
      |1 |2 |01 |03|2012|127.0.0.1|
      |2 |2 |01 |03|2012|127.0.0.2|
      |3 |2 |01 |03|2012|127.0.0.3|
      |4 |2 |01 |03|2012|127.0.0.4|
      |5 |3 |01 |03|2012|127.0.0.1|
      |6 |4 |01 |03|2012|127.0.0.1|
      |7 |4 |01 |03|2012|127.0.0.1|

      Burda görüldüğü gibi bu gün içerisinde 2 id li firmaya 4 kere girilmiş
      3id li firmaya 1 kere girilmiş 4 id li firmaya 2 kere girilmiş
      ekranada çıktı olarak en fazla girilen 2id li olan sonra 4id li olan sonrada 3idli firmayı yazdıran sql kodu nedir yani yapamadığım olay bu diğerlerinde bi sorun yok.
      10 yıl önce yazılmış
    • sharq adlı üyenin fotoğrafı sharq
      şimdi bu mantığı anladım sum ile firma_hit tablosundaki hit_sayisi'ni toplatıyoruz ve toplam'a eşitliyoruz sonrada right join ile firmahiti ve firmalar tablosunu birleştiriyoruz snra firmalar daki id eşitse firmahitindeki firma id'ye grup olşturuyoruz firmalarid diye ve bunu başta tanımladığımız toplam ı büyükten küçüğe yazıyoruz ama ben bunu çalıştırınca bi hata veriyor tablomu şu şekilde deyiştirdim.



      CREATE TABLE `firma_hit` (
        `id` int(10) NOT NULL auto_increment,
        `firma_id` varchar(10) NOT NULL,
        `gun` varchar(80) NOT NULL,
        `ay` varchar(80) NOT NULL,
        `yil` varchar(80) NOT NULL,
        `ip` varchar(80) NOT NULL,
        `hit` int(10) NOT NULL default '1',
        PRIMARY KEY  (`id`)
      ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ;
      


      bu tabloya göre sql kodunu düzenleyip yazarmısın??
      10 yıl önce yazılmış
    • sharq adlı üyenin fotoğrafı sharq
      SELECT firmalar.firmaadi, firmalar.id, firma_hit.firma_id, SUM( firma_hit.hit ) AS toplam
      FROM firma_hit
      INNER JOIN firmalar ON firmalar.id = firma_hit.firma_id
      GROUP BY firmalar.id
      ORDER BY toplam DESC
      LIMIT 10 ;
      


      Böle Yapınca Buldu Teşekkürler.
      10 yıl önce yazılmış

Cevaplar

  • ziyahan adlı üyenin fotoğrafı
    10 yıl önce yazılmış
    29 cevap - 2 soru
    Merhaba;
    Aşağıdaki gibi bir mantıkla yapabilirsiniz.

    INSERT INTO `table` (value1, value2) 
    SELECT 'stuff for value1', 'stuff for value2' FROM `table` 
    WHERE NOT EXISTS (SELECT * FROM `table` 
                      WHERE value1='stuff for value1' AND value2='stuff for value2') 
    LIMIT 1
    



    Bunun dışında, REPLACE INTO, INSERT IGNORE INTO gibi yöntemlerden birini de kullanabilirsiniz.
    • sharq adlı üyenin fotoğrafı sharq
      öncelikle cevabınız için teşekkrler ama pek birşey anlamadım ve gördüğüm kadarıyla INSERT ile neyi ekleteceğiz zaten ben firma_detay.php sayfasında sorgu yaptırdım eger varsa öle bişi yazdırdım isterseni o sorguyuda vereyim


      firma_detay.php sayfasındaki hit sorgusu




      $ip = $_SERVER['REMOTE_ADDR'];	$gun = date("d"); $ay	=date("m"); $yil = date("Y");
      			
      			$hitsorgu = mysql_query("SELECT * FROM firma_hit WHERE firma_id='$firma' and ip='$ip' and gun='$gun' and ay='$ay' and yil='$yil'");
      			if(mysql_num_rows($hitsorgu)<1){ 
      			  	mysql_query("INSERT INTO firma_hit (firma_id,ip,gun,ay,yil) VALUES ('$firma','$ip','$gun','$ay','$yil')");
      			}
      
      10 yıl önce yazılmış