• 23-04-2013, 19:56:11
    #1
    Sa Arkadaşlar, kendi scriptimde etiketleme sistemi için bir kod yazmaya çalıştım ama tam olarak isteğim sonucu vermedi.
    Ben Aynı Etikelerin Tekrarlanmamasını ve veritabanındaki etiketler kolunundaki türkçe karakterli harflerin aşağıda array ile değiştirmeye çalıştığım gibi olmasını istiyorum.
    Yani kelime: Öksüz Kuş => Oksuz+Kus şeklinde olmasını istiyorum. aynı etiketlerin tekrarlanmasını istemiyorum.
    parcala = explode(', ', $yaz["etiketler"]); bu şekilde ayrılmış herbir etiketin aynı olanlarını ekrana vermesin, sadece birini ekrana yansıtsın istiyorum. yardımcı olabilecek var mı?
    veritabanı örneğim: http://pastebin.com/ziTM5xAk
    veritabanı yapısı ss: http://p1304.hizliresim.com/18/t/mfz2r.png
    $SQL1 = mysql_query("SELECT * from tablo LIMIT 0, 10");
    while ($yaz = mysql_fetch_assoc($SQL1)){ 
    $parcala = explode(', ', $yaz["etiketler"]);
    $tr1=array("/'/",'/ç/','/Ç/','/ı/','/İ/','/ğ/','/Ğ/','/ö/','/Ö/','/ş/','/Ş/','/ü/','/Ü/','/ /');
    $tr2=array("",'c','C','i','i','g','G','o','O','s','S','u','U','-');
    $parcala2 = preg_replace($tr1,$tr2,$parcala);
    $say = count($parcala2);
    for($i=0; $i<$say; $i++){
    $etiketle = trim($parcala2[$i]);
    echo "
    ".$etiketle."<br/>
    "; 
    }
    }
  • 23-04-2013, 20:17:39
    #2
    Tekrar eden verilerin tek bir veri halinde gösterilmesi için, GROUP BY ifadesi kullanılır.

    Sizin örneğiniz için ;

    $SQL1 = mysql_query("SELECT * from tablo LIMIT 0, 10 group by etiket");
  • 23-04-2013, 20:38:26
    #3
    NepenTheS adlı üyeden alıntı: mesajı görüntüle
    Tekrar eden verilerin tek bir veri halinde gösterilmesi için, GROUP BY ifadesi kullanılır.

    Sizin örneğiniz için ;

    $SQL1 = mysql_query("SELECT * from tablo LIMIT 0, 10 group by etiket");
    Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\dene.php on line 8
    $SQL1 = mysql_query("SELECT * from videolar LIMIT 0,10 group by etiketler");
    while ($yaz = mysql_fetch_array($SQL1)){ 
    $parcala = explode(', ', $yaz["etiketler"]);
    
    $say = count($parcala);
    for($i=0; $i<$say; $i++){
    $etiketle = trim($parcala[$i]);
    $tr1=array('/ç/','/Ç/','/ı/','/İ/','/ğ/','/Ğ/','/ö/','/Ö/','/ş/','/Ş/','/ü/','/Ü/','/ /');
    $tr2=array('c','C','i','i','g','G','o','O','s','S','u','U','-');
    $etiketle = preg_replace($tr1,$tr2,$etiketle);
    echo "
    ".$etiketle."<br/>
    "; 
    }
    }
    sizin dediğiniz gibi düzenleme yaptım sanırım sizin yazdığınız istediğim gibi bir sonuç vermeyecek gibi geliyor hata giderilsede
  • 23-04-2013, 21:10:39
    #4
    ufukt51 adlı üyeden alıntı: mesajı görüntüle
    Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\dene.php on line 8
    $SQL1 = mysql_query("SELECT * from videolar LIMIT 0,10 group by etiketler");
    while ($yaz = mysql_fetch_array($SQL1)){ 
    $parcala = explode(', ', $yaz["etiketler"]);
    
    $say = count($parcala);
    for($i=0; $i<$say; $i++){
    $etiketle = trim($parcala[$i]);
    $tr1=array('/ç/','/Ç/','/ı/','/İ/','/ğ/','/Ğ/','/ö/','/Ö/','/ş/','/Ş/','/ü/','/Ü/','/ /');
    $tr2=array('c','C','i','i','g','G','o','O','s','S','u','U','-');
    $etiketle = preg_replace($tr1,$tr2,$etiketle);
    echo "
    ".$etiketle."<br/>
    "; 
    }
    }
    sizin dediğiniz gibi düzenleme yaptım sanırım sizin yazdığınız istediğim gibi bir sonuç vermeyecek gibi geliyor hata giderilsede
    Üstad sorguda hata var group by etiketler yazdığınız alanın doğru olduğundan emin misiniz
  • 23-04-2013, 21:13:56
    #5
    evet kolon adı etiketler sizin söylediğiniz şekilde sadece soruguyu değiştirdim
    $SQL1 = mysql_query("SELECT * from videolar LIMIT 0, 10 group by etiketler"); bu şekilde fakat hata veriyor.
    Dipnot: Sizin söylediğiniz gibi group by etiketler vs.. yazsamda şunun olacağını sanmıyorum. Video izle etiketinden 100 tane varsa veritabanında etiketler kolonunda. bu şekilde sadece birini listeleyeceğini sanmıyorum. İlk mesajımda bunlardan sadece birini nasıl listelerim diye sormuştum
  • 23-04-2013, 21:22:51
    #6
    ufukt51 adlı üyeden alıntı: mesajı görüntüle
    evet kolon adı etiketler sizin söylediğiniz şekilde sadece soruguyu değiştirdim
    $SQL1 = mysql_query("SELECT * from videolar LIMIT 0, 10 group by etiketler"); bu şekilde fakat hata veriyor.
    Dipnot: Sizin söylediğiniz gibi group by etiketler vs.. yazsamda şunun olacağını sanmıyorum. Video izle etiketinden 100 tane varsa veritabanında etiketler kolonunda. bu şekilde sadece birini listeleyeceğini sanmıyorum. İlk mesajımda bunlardan sadece birini nasıl listelerim diye sormuştum
    Konu hakkında bilgi sahibi olmadan nasıl varsayım yapıyorsun anlamıyorum. O zaman sana kolay gelsin, google'da mysql group by diye araştır ne anlama geldiğini görürsün.
  • 23-04-2013, 21:30:01
    #7
    NepenTheS adlı üyeden alıntı: mesajı görüntüle
    Konu hakkında bilgi sahibi olmadan nasıl varsayım yapıyorsun anlamıyorum. O zaman sana kolay gelsin, google'da mysql group by diye araştır ne anlama geldiğini görürsün.
    evet biliyorum fakat sizinde anlamak istemediğiniz benim yazdığım kodta array ile dizi oluşturulmuş ben bu kodlamada çalışmayacağını söyledim. nitekim array ile çalışmadı hatayı incelerseniz bunu görebilirsiniz. mevcut kodlama üzerinden yola çıkarak yardımcı olmanızı rica edecicem.
  • 24-04-2013, 13:21:31
    #8
    yok mu yardımcı olabilecek arkadaşlar
  • 24-04-2013, 18:47:06
    #9
    Sinirlenmeye gerek yok, benimde php bilgim zayıf ama şöyle bir yöntem deneyebilirsiniz olur mu bilmiyorum.. Daha kesin ve pratik çözümü olan paylaşırsa çok sevinirim.

    $SQL1 = mysql_query("SELECT * from videolar group by etiketler LIMIT 0,10");
    while ($yaz = mysql_fetch_array($SQL1)){ 
    $parcala = explode(', ', $yaz["etiketler"]);
    $result = array_unique($parcala);
    
    $say = count($parcala);
    for($i=0; $i<$say; $i++){
    $etiketle = trim($result[$i]);
    $tr1=array('/ç/','/Ç/','/ı/','/İ/','/ğ/','/Ğ/','/ö/','/Ö/','/ş/','/Ş/','/ü/','/Ü/','/ /');
    $tr2=array('c','C','i','i','g','G','o','O','s','S','u','U','-');
    $etiketle = preg_replace($tr1,$tr2,$etiketle);
    echo ''.$etiketle.'<br/>'; 
    }
    }