• 02-08-2019, 16:28:40
    #1
    Merhabalar, bir mysql tablomuz var bu tabloda birden fazla değer var fakat bu değerli tek olarak sayıyor örnek olarak göstermem gerekirse.


    Bu şekilde birden fazla genre_id giriyor fakat sorun şurada başlıyor bu genre_id saydırıyorum ;

    $id=$_GET['g_id'];
            $sql=mysqli_query($mysqli,"SELECT * FROM tbl_genres WHERE gid='$id'");
            $row=mysqli_fetch_assoc($sql);
    
    
            if($row['genre_img']!="")
         {
                unlink('images/'.$row['genre_img']);
                 unlink('images/thumbs/'.$row['genre_img']);
    
            }
    
            Delete('tbl_genres','gid='.$id.'');
    
            $_SESSION['msg']="12";
            header( "Location:yonet_genre.php");
            exit;
            
        }    
    
    function get_total_item($id)
    {
    global $mysqli;
    
    $sql="SELECT COUNT(*) as num FROM tbl_mov WHERE genre_id='".$id."'";
    
    $total_movies = mysqli_fetch_array(mysqli_query($mysqli,$sql));
    return $total_mov['num'];
      }
    Sadece tek değer girilmiş idleri sayıp yazdırıyor ekrana 22 id tekse sayıyor 22,23,24 değerlerini de yazdırması lazım fakat bir türlü olmadı nerede yanlış yapıyorum ?
  • 02-08-2019, 16:36:02
    #2
    $genre_id = "(SUBSTRING_INDEX(SUBSTRING_INDEX(genre_id, ',', 1), ',', -1) = '".$id."'"
    $genre_id.= " or SUBSTRING_INDEX(SUBSTRING_INDEX(genre_id, ',', 2), ',', -1) = '".$id."'"
    $genre_id.= " or SUBSTRING_INDEX(SUBSTRING_INDEX(genre_id, ',', 3), ',', -1) = '".$id."'"
    $genre_id.= " or SUBSTRING_INDEX(SUBSTRING_INDEX(genre_id, ',', 4), ',', -1) = '".$id."'"
    $genre_id.= " or SUBSTRING_INDEX(SUBSTRING_INDEX(genre_id, ',', 5), ',', -1) = '".$id."'"
    $genre_id.= " or SUBSTRING_INDEX(SUBSTRING_INDEX(genre_id, ',', 6), ',', -1) = '".$id."'"
    $genre_id.= " or SUBSTRING_INDEX(SUBSTRING_INDEX(genre_id, ',', 7), ',', -1) = '".$id."'"
    $genre_id.= " or SUBSTRING_INDEX(SUBSTRING_INDEX(genre_id, ',', 8), ',', -1) = '".$id."'"
    $genre_id.= " or SUBSTRING_INDEX(SUBSTRING_INDEX(genre_id, ',', 9), ',', -1) = '".$id."'"
    $genre_id.= " or SUBSTRING_INDEX(SUBSTRING_INDEX(genre_id, ',', 10), ',', -1) = '".$id."')"
    
    $sql="SELECT COUNT(*) as num FROM tbl_mov WHERE '.$genre_id.';
    Test etmedim elimle yazdığım için yazım hataları olabilir ama çözüm yukarıdaki gibi

    Mantık şu SUBSTRING_INDEX koduyla ilgili sutundaki virgül ile ayrılmış alanları bölüyor array yapıyor gibi düşün sonra her elemanı kontrol ediyor yukarıdaki kodda 10 adet eleman kontrolü yapıyor
  • 02-08-2019, 16:46:07
    #3
    ustunweb adlı üyeden alıntı: mesajı görüntüle
    $genre_id = "(SUBSTRING_INDEX(SUBSTRING_INDEX(genre_id, ',', 1), ',', -1) = '".$id."'"
    $genre_id.= " or SUBSTRING_INDEX(SUBSTRING_INDEX(genre_id, ',', 2), ',', -1) = '".$id."'"
    $genre_id.= " or SUBSTRING_INDEX(SUBSTRING_INDEX(genre_id, ',', 3), ',', -1) = '".$id."'"
    $genre_id.= " or SUBSTRING_INDEX(SUBSTRING_INDEX(genre_id, ',', 4), ',', -1) = '".$id."'"
    $genre_id.= " or SUBSTRING_INDEX(SUBSTRING_INDEX(genre_id, ',', 5), ',', -1) = '".$id."'"
    $genre_id.= " or SUBSTRING_INDEX(SUBSTRING_INDEX(genre_id, ',', 6), ',', -1) = '".$id."'"
    $genre_id.= " or SUBSTRING_INDEX(SUBSTRING_INDEX(genre_id, ',', 7), ',', -1) = '".$id."'"
    $genre_id.= " or SUBSTRING_INDEX(SUBSTRING_INDEX(genre_id, ',', 8), ',', -1) = '".$id."'"
    $genre_id.= " or SUBSTRING_INDEX(SUBSTRING_INDEX(genre_id, ',', 9), ',', -1) = '".$id."'"
    $genre_id.= " or SUBSTRING_INDEX(SUBSTRING_INDEX(genre_id, ',', 10), ',', -1) = '".$id."')"
    
    $sql="SELECT COUNT(*) as num FROM tbl_mov WHERE '.$genre_id.';
    Test etmedim elimle yazdığım için yazım hataları olabilir ama çözüm yukarıdaki gibi

    Mantık şu SUBSTRING_INDEX koduyla ilgili sutundaki virgül ile ayrılmış alanları bölüyor array yapıyor gibi düşün sonra her elemanı kontrol ediyor yukarıdaki kodda 10 adet eleman kontrolü yapıyor
    Teşekkür ederim araştırayım hocam SUBSTRING_INDEX olayını
  • 02-08-2019, 16:47:46
    #4
    NormP adlı üyeden alıntı: mesajı görüntüle
    Merhabalar, bir mysql tablomuz var bu tabloda birden fazla değer var fakat bu değerli tek olarak sayıyor örnek olarak göstermem gerekirse.


    Bu şekilde birden fazla genre_id giriyor fakat sorun şurada başlıyor bu genre_id saydırıyorum ;

    $id=$_GET['g_id'];
    $sql=mysqli_query($mysqli,"SELECT * FROM tbl_genres WHERE gid='$id'");
    $row=mysqli_fetch_assoc($sql);
    
    
    if($row['genre_img']!="")
    {
    unlink('images/'.$row['genre_img']);
    unlink('images/thumbs/'.$row['genre_img']);
    
    }
    
    Delete('tbl_genres','gid='.$id.'');
    
    $_SESSION['msg']="12";
    header( "Location:yonet_genre.php");
    exit;
    
    }
    
    function get_total_item($id)
    {
    global $mysqli;
    
    $sql="SELECT COUNT(*) as num FROM tbl_mov WHERE genre_id='".$id."'";
    
    $total_movies = mysqli_fetch_array(mysqli_query($mysqli,$sql));
    return $total_mov['num'];
    }
    Sadece tek değer girilmiş idleri sayıp yazdırıyor ekrana 22 id tekse sayıyor 22,23,24 değerlerini de yazdırması lazım fakat bir türlü olmadı nerede yanlış yapıyorum ?

    Öncelikle veritabanı tasarımınız hatalı.
    Tablo ilişkilerini böyle virgül ile ayırarak kurarsanız böyle sorunlar almanız normal.
    Çünkü siz 22 değerine eşit satırları çağırıyorsunuz ama 22,23,24 diye bir değer olduğunda bu 22 değerine eşit olmaz.

    Böyle sorunlar almamak için, 2 farklı tabloda bir satırı birden çok satıra bağlamanız gerekiyorsa 3. bir taxonomy tablosu ile bağlamanız lazım inner join ile sorgulamanız lazım.

    Geçici çözüm olarak sorgunuzu bu şekilde
    WHERE genre_id='".$id."' OR genre_id='".$id.",%' OR genre_id=',".$id.",' OR genre_id='%,".$id."'
    yapabilirsiniz.

    Bu şekilde
    ister 22 olsun
    ister 22,23,24 olsun
    ister 21,22,23 olsun
    ister 20,21,22 olsun
    sayar.

    Ama dediğim gibi yol yakınken veritabanı yapınızı değiştirin.
    Bir şarkıyı birden çok kategoriye bağlayacaksanız, şarkılar tablonuz, kategoriler tablonuz ve şarkı idleri ile kategori idlerini bağlayan bir taxonomy tablonuz olmalı.
    Sizin tablo ilişkisi yapınız ancakher şarkının tek bir kategorisi olacaksa kullanılabilir.
  • 02-08-2019, 18:30:14
    #5
    cok kasmissiniz .

    select count(id) from tbl_mov where find_in_set($id,genre_id);
  • 02-08-2019, 22:37:41
    #6
    Efe4ka adlı üyeden alıntı: mesajı görüntüle
    cok kasmissiniz .

    select count(id) from tbl_mov where find_in_set($id,genre_id);
    Aynen herkes baya kasmış senin cevabını son anda gördüm ben yazıyordum şimdi