• 27-11-2012, 14:36:41
    #10
    miscel adlı üyeden alıntı: mesajı görüntüle
    SELECT * FROM kampanya WHERE tarih > '2012-11-27' and alan1 IN (1,2,3) and alan2 IN (2,3) ORDER BY tarih ASC

    bunun ne anlama geldiğini açıklarsak belki hatayı bulabilirsiniz.

    alan1 IN (1,2,3) and alan2 IN (2,3) demek :

    (alan1 = 1 AND alan2 = 2 OR alan1 = 1 AND alan2 = 3)
    OR
    (alan1 = 2 AND alan2 = 2 OR alan1 = 2 AND alan2 = 3)
    OR
    (alan1 = 3 AND alan2 = 2 OR alan1 = 3 AND alan2 = 3)

    bu koşulları taşıyan kolonlar var mı?
    var tabiki hocam. olmasa nasil o şekilde bir sorgu yazayim.

    --R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 14:36:41 -->-> Daha önceki mesaj 14:33:54 --

    frdtrkc adlı üyeden alıntı: mesajı görüntüle
    Sql scriptini buraya eklersen yardımcı olmaya çalışırım.
    $multisigorta = implode(",",$_POST[multisigorta]);
    $multiindirim = implode(",",$_POST[multiindirim]);
    $Kampanya=$SP_DB->Cok("SELECT * FROM kampanya WHERE sonlanma > '".date("Y-m-d")."' and kamp_firma IN (".$multisigorta.") and kamp_meslek IN (".$multiindirim.") ORDER BY sonlanma ASC");
    CREATE TABLE `kampanya` (
      `id` int(11) NOT NULL auto_increment,
      `name` text NOT NULL,
      `seo` text NOT NULL,
      `detay` longtext NOT NULL,
      `baslangic` date NOT NULL,
      `sonlanma` date NOT NULL,
      `ip` varchar(15) NOT NULL,
      `time` datetime NOT NULL,
      `durum` int(1) NOT NULL default '0',
      `company` int(11) NOT NULL,
      `kamp_firma` varchar(11) NOT NULL,
      `kamp_meslek` varchar(11) NOT NULL,
      `kamp_resim` text NOT NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=10 ;
    
    -- 
    -- Tablo döküm verisi `kampanya`
    -- 
    
    INSERT INTO `kampanya` VALUES (1, 'Acıbadem ve Ak Sigorta Hayat Sigortası', 'Acibadem-ve-Ak-Sigorta-Hayat-Sigortasi', '', '2012-11-26', '2012-11-28', '', '2012-11-27 11:03:33', 1, 0, '1,2', '1,2,3', 'images/kampanya/1354007013-Acibadem-ve-Ak-Sigorta-Hayat-Sigortasi.jpg');
    
    INSERT INTO `kampanya` VALUES (2, 'Anadolu Hayat ve Ankara Sigorta Dask Sigortası', '', '2012-11-30', '2012-12-31', '', '2012-11-27 11:07:09', 1, 0, '3,4', '3,4,5', 'images/kampanya/1354007229-Anadolu-Hayat-ve-Ankara-Sigorta-Dask-Sigortasi.jpg');
    
    INSERT INTO `kampanya` VALUES (3, 'Axa Oyak Konut Sigortası', 'Axa-Oyak-Konut-Sigortasi', '', '2012-11-28', '2012-12-25', '', '2012-11-27 11:17:54', 1, 0, '6', '5', 'images/kampanya/1354007874-Axa-Oyak-Konut-Sigortasi.jpg');
  • 27-11-2012, 14:38:21
    #11
    kamp_firma kamp_meslek

    sonuçları bu kolonlarda arıyorsan bu sorgu ile doğru sonuç vermez. Yapısı ve depolama tipin yanlış
  • 27-11-2012, 14:39:43
    #12
    tek bir tanesini yazdigimda sonuc aliyorum ama ?.. dogru sonucu nasil aldiricaz peki ?
  • 27-11-2012, 14:49:46
    #13
    = operatorü ile ya da LIKE ile belirli bir yapıyı arayabilirsin.

    SELECT * FROM `kampanya` WHERE kamp_meslek IN (2,3) bu ise sorduğunuz son soruda geçen sorgunun bir başka versiyonu olmasına rağmen doğru cevabı vermez.
  • 27-11-2012, 14:54:15
    #14
    miscel adlı üyeden alıntı: mesajı görüntüle
    = operatorü ile ya da LIKE ile belirli bir yapıyı arayabilirsin.

    SELECT * FROM `kampanya` WHERE kamp_meslek IN (2,3) bu ise sorduğunuz son soruda geçen sorgunun bir başka versiyonu olmasına rağmen doğru cevabı vermez.

    Sonuç vermez dediğiniz sorgunun sonucu hocam buyur.

  • 27-11-2012, 14:55:55
    #15
    XYZ
    Kimlik doğrulama veya yönetimden onay bekliyor.
    $multisigorta = array(1,2,3); 
    $multiindirim = array(2,3); 
    
    foreach($multisigorta as $deger){
        $sql_firma[] = 'kamp_firma LIKE %'.$deger.'%';
    }
    
    foreach($multiindirim as $deger){
        $sql_indirim[] = 'kamp_meslek LIKE %'.$deger.'%';
    }
    
    $sql = 'SELECT * FROM kampanya WHERE sonlanma > '.date("Y-m-d").' AND '.implode(" AND ", $sql_firma).' AND '.implode(" AND ", $sql_indirim).' ORDER BY sonlanma ASC';
    
    
    $Kampanya=$SP_DB->Cok($sql);
    Denemedim fakat bu şekilde çalışabilir.
  • 27-11-2012, 14:58:53
    #16
    Ayrıca

    SELECT * FROM kampanya WHERE sonlanma > '2012-11-27' and kamp_firma IN (1) and kamp_meslek IN (2) ORDER BY sonlanma ASC

    yukarıdaki sorguda

     kamp_firma IN (1) and kamp_meslek IN (2)
    AND yerine OR yazdigim zaman sonuc veriyor. Ama bana OR değil AND lazım.

    --R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 14:58:53 -->-> Daha önceki mesaj 14:57:07 --

    XYZ adlı üyeden alıntı: mesajı görüntüle
    $multisigorta = array(1,2,3); 
    $multiindirim = array(2,3); 
    
    foreach($multisigorta as $deger){
        $sql_firma[] = 'kamp_firma LIKE %'.$deger.'%';
    }
    
    foreach($multiindirim as $deger){
        $sql_indirim[] = 'kamp_meslek LIKE %'.$deger.'%';
    }
    
    $sql = 'SELECT * FROM kampanya WHERE sonlanma > '.date("Y-m-d").' AND '.implode(" AND ", $sql_firma).' AND '.implode(" AND ", $sql_indirim).' ORDER BY sonlanma ASC';
    
    
    $Kampanya=$SP_DB->Cok($sql);
    Denemedim fakat bu şekilde çalışabilir.
    Emeğin için tşk ederim ancak LIKE | OR | = vs. benim istedigim sonucu net olarak vermiyor like kullanarak 21 de arasan 121 de arasan aynı sonucu alirsin.
  • 27-11-2012, 15:02:04
    #17
    neptun adlı üyeden alıntı: mesajı görüntüle
    Ayrıca

    SELECT * FROM kampanya WHERE sonlanma > '2012-11-27' and kamp_firma IN (1) and kamp_meslek IN (2) ORDER BY sonlanma ASC

    yukarıdaki sorguda

     kamp_firma IN (1) and kamp_meslek IN (2)
    AND yerine OR yazdigim zaman sonuc veriyor. Ama bana OR değil AND lazım.

    --R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 14:58:53 -->-> Daha önceki mesaj 14:57:07 --



    Emeğin için tşk ederim ancak LIKE | OR | = vs. benim istedigim sonucu net olarak vermiyor like kullanarak 21 de arasan 121 de arasan aynı sonucu alirsin.
    Evet sonradan bende fark ettim öyle bir sorun ortaya çıkıyor.
  • 27-11-2012, 15:05:23
    #18
    Orada IN kullanamazsınız.

    String veriyi virgülle ayırmışsınız. Zaten bu veri depolama tipi yanlış.
    Ancak bu şartlar altında LIKE kolon '%1,2%' ile arama yapabilir ya da WHERE kolon = '1,2,3' gibi eşitleyebilirsiniz.
    Depolama anlayışını düzeltmek daha iyi mantıktır tabii burada.

    Google IN CLAUSE yazıp araştırın. Yanlış şekilde kullanıyorsunuz.Sizin sorguları balata olarak, veriyi de lastik olarak düşünürsek bu balata bu lastiği tam kavrayamaz.