• 06-01-2022, 22:34:47
    #1
    Merhaba arkadaşlar

    veritabanımda masalar adında bir alanım var bu alan içerisindeki 15,54,78,36,14,57,98, şeklinde virgül ile ayrılmış id lerim var. multiple select ile çoklu id gönderiyorum gönderdiğim id ler şu şekilde 54,36,25

    performans kaybı yaşamadan gönderdiğim id leri veritabanında sorgulayıp veri varsa yazdırmam gerekiyor bu konu hakkında fikir verebilirmisiniz.
  • 06-01-2022, 22:36:40
    #2
    hocam, sql sorgusunda id like '%$aranan%' olarak yapın direk çıkar
  • 06-01-2022, 22:48:13
    #3
    Normal şartlarda istediğinizi FIND_IN_SET ile yapmalısınız. Ancak ben size tablo yapınızı değiştirmenizi öneririm.

    $sql = "SELECT * FROM tablo_adi WHERE FIND_IN_SET('54', masalar) OR FIND_IN_SET('36',masalar) OR FIND_IN_SET('25', masalar)";
  • 06-01-2022, 22:48:15
    #4
    website adlı üyeden alıntı: mesajı görüntüle
    hocam, sql sorgusunda id like '%$aranan%' olarak yapın direk çıkar

    lıke komutu harici performansı dahada artıran bir işlem aradım aslında ama sanırım iş dahada uzadığı için en kestirmesi lıke
  • 07-01-2022, 00:01:17
    #5
    fatihemre adlı üyeden alıntı: mesajı görüntüle
    Normal şartlarda istediğinizi FIND_IN_SET ile yapmalısınız. Ancak ben size tablo yapınızı değiştirmenizi öneririm.

    $sql = "SELECT * FROM tablo_adi WHERE FIND_IN_SET('54', masalar) OR FIND_IN_SET('36',masalar) OR FIND_IN_SET('25', masalar)";
    sizin örneğinizde id sayısının toplamı 3 ise bu olabilir ama multiselect de id sayısının toplam ne geleceği belli olmayacağı için bu işe yaramaz diye düşünüyorum.

    ayrıca tablo yapısını değiştirmekten kastınız tam olarak nedir yani nasıl birşey öneriyorsunuz.
  • 07-01-2022, 14:27:21
    #6
    bu verileri JSON türündeki bir sütunda saklayın. [12,89,78] gibi daha sonra mysql'in kendi bünyesinde bulunan json search fonskiyonları ile sorgulama yapabilirsiniz. JSON_SEARCH, JSON_CONTAINS vb inceleyebilirsiniz.

    https://dev.mysql.com/doc/refman/8.0...functions.html
  • 07-01-2022, 15:31:06
    #7
    ilişkileri farklı bir tabloda tutun. örn; odalar, masalar, odalara_ait_masalar. her şeyi aynı tabloya sıkıştırmaya ve daha fazla tabloyla çalışmaktan çekinmeye gek yok.
  • 07-01-2022, 15:46:04
    #8
    aslında şuanda tablo yapısın değiştirme lüksüm yok sistemin 90% lık kısmı bitti sadece virgül ile aramada sorunlar yaşıyorum örnek

    foreach ($_POST['gelenler'] as $yaz)
    
    {
    
          $tablo = sorgu kodlarımda $yaz çalıştırıp lazım olan ustid buluyorum
    
          foreach ($tablo as $yaz2) {
    
                 $tablo = sorgu kodlarımda $yaz2 çalıştırıp lazım olan id buluyorum
    
                 foreach ($tablo as $yaz3) {
    
                       $sontablo =sorgusunu çalıştırıp $yaz3 ile gelen veriyi find_in_set ile sorgulayıp virgüllü alanda aramayı yapıyorum
    
                         foreach ($sontablo as $yaz4) {
    
                           echo $yaz4["firmad_adi"];
    
                         }
                }
           }
    }


    şeklinde yapıp verileri alıyorum fakat firma adından ilk başdaki $tablo da kaç adet sorgu çekebildiyse o kadar yazdırıyor group by firma_adi da işe yaramadı

    yani a firmasından $tablo da 3 adet seçili ise

    a firması
    a firması
    a firması

    b firmasından 2 adet seçili ise

    b firması
    b firması

    şeklinde veriyor

    bu saatten sonra veritabanı yapısını değiştirmem sistemi yeniden yazmaya eşdeğer buda beni 1-2 aylık bir zarara uğratır bu yüzden bu şekilde çözmek zorundayım
  • 07-01-2022, 17:43:20
    #9
    $masalar= implode(',', $_POST['masalar']);
    
    $cek = $db->prepare("SELECT * FROM masa  WHERE masalar IN ($masalar)");
    $cek->execute();
    foreach ($cek as $key) {
        //İşlemler.
    }
    Bu şekilde düşündünüz mü ?