• 27-01-2023, 14:51:02
    #1
    Merhaba. Elimde veriler tablosunda arama işlemi yaptırtıp, arama sonucu ekrana basan bir işlemim var.
    İstiyorum ki veriler tablosuna ek olarak iletişim tablomun içinden de arama yapsın, her iki tabloda çıkan sonucu ekrana bassın.
    Nasıl yapabilirim?
    <?php
    $sorgu=$db->prepare("
    SELECT
    veriler.kbaslik,
    veriler .baslik,
    kats.kadi,
    kats.katurl
    FROM posts
    INNER JOIN katsON kats.id = veriler.kats_id
    WHERE baslik LIKE :baslik OR kbaslik LIKE :kbaslik
    ORDER BY veriler.id DESC ");
    $kelime= $_GET['q'];
    $sorgu->execute(array(':baslik' => '%'.$kelime.'%', ':kbaslik ' => '%'.$kelime.'%'));
    ?>
    Ekrana Bas:
    if($sorgu->rowCount()){
        foreach($sorgu as $row){
               echo '$row['baslik']';
        }
    }
  • 27-01-2023, 14:59:54
    #2
    SELECT veriler.kbaslik, veriler.baslik, kats.kadi, kats.katurl, iletişim.email, iletişim.telefon
    FROM veriler
    INNER JOIN kats ON kats.id = veriler.kats_id
    INNER JOIN iletişim ON iletişim.veriler_id = veriler.id
    WHERE baslik LIKE :baslik OR kbaslik LIKE :kbaslik OR iletişim.email LIKE :email
    ORDER BY veriler.id DESC

    işletim de ise email yerinde arama yapar
  • 27-01-2023, 15:02:08
    #3
    $pdo = new PDO('mysql:host=localhost;dbname=mydb', 'username', 'password');    
    $search = "%search_term%"; 
       $stmt = $pdo->prepare("SELECT * FROM users JOIN posts ON users.user_id = posts.user_id WHERE users.username LIKE :search OR posts.post_title LIKE :search"); 
       $stmt->bindParam(':search', $search); 
       $stmt->execute(); 
       $results = $stmt->fetchAll(); 
       print_r($results);
  • 27-01-2023, 15:59:22
    #4
    Royxr_cod adlı üyeden alıntı: mesajı görüntüle
    SELECT veriler.kbaslik, veriler.baslik, kats.kadi, kats.katurl, iletişim.email, iletişim.telefon
    FROM veriler
    INNER JOIN kats ON kats.id = veriler.kats_id
    INNER JOIN iletişim ON iletişim.veriler_id = veriler.id
    WHERE baslik LIKE :baslik OR kbaslik LIKE :kbaslik OR iletişim.email LIKE :email
    ORDER BY veriler.id DESC

    işletim de ise email yerinde arama yapar
    Hocam işlemden çok bir şey anlayamadım bir tık karmaşık olmuş.
    Sanırım iki tablonun benzer id'lerini eşitliyorsunuz burada.
    Acaba sadece iki tablo içinden, nasıl daha basit bir arama yapılabilir?
  • 27-01-2023, 15:59:35
    #5
    DOS adlı üyeden alıntı: mesajı görüntüle
    $pdo = new PDO('mysql:host=localhost;dbname=mydb', 'username', 'password');    
    $search = "%search_term%"; 
       $stmt = $pdo->prepare("SELECT * FROM users JOIN posts ON users.user_id = posts.user_id WHERE users.username LIKE :search OR posts.post_title LIKE :search"); 
       $stmt->bindParam(':search', $search); 
       $stmt->execute(); 
       $results = $stmt->fetchAll(); 
       print_r($results);
    Hocam işlemden çok bir şey anlayamadım bir tık karmaşık olmuş.
    Sanırım iki tablonun benzer id'lerini eşitliyorsunuz burada.
    Acaba sadece iki tablo içinden, nasıl daha basit bir arama yapılabilir?
  • 28-01-2023, 10:38:21
    #6
    Eklemek istediğiniz iletişim tablomu aynı şekilde INNER JOIN yaparak sorgunun içine ekleyebilirsiniz. Örneğin:

    SELECT
    veriler.kbaslik,
    veriler .baslik,
    kats.kadi,
    kats.katurl,
    iletisim.email,
    iletisim.telefon
    FROM veriler
    INNER JOIN kats ON kats.id = veriler.kats_id
    INNER JOIN iletisim ON iletisim.id = veriler.iletisim_id
    WHERE baslik LIKE :baslik OR kbaslik LIKE :kbaslik OR iletisim.email LIKE :email OR iletisim.telefon LIKE :telefon
    ORDER BY veriler.id DESC


    ve execute için ekleyebilirsiniz :

    $sorgu->execute(array(':baslik' => '%'.$kelime.'%', ':kbaslik ' => '%'.$kelime.'%', ':email' => '%'.$kelime.'%', ':telefon' => '%'.$kelime.'%'));

    Ekrana bastırmak için ise, eklenen sütunları yazdırmanız gerekir. Örneğin:

    echo 'Baslik: '.$row['baslik'].' - Kategori: '.$row['kadi'].' - Email: '.$row['email'].' - Telefon: '.$row['telefon'];

    Not: Bu sadece bir örnektir, sorgunuzun ve ekrana bastırmak istediğiniz sütunların gerçekteki isimleri farklı olabilir.