• 15-01-2020, 12:01:53
    #1
    merhaba arkadaşlar şöyle bi sıkıntı var kod aşağı da onun altında detaylı açıkladım problemi;

    $query  =   $db->prepare("SELECT * FROM books b
    join books_authors ba on b.id = ba.bid
    join authors a on a.id = ba.aid
    where b.status = '1' AND b.title LIKE :pre_title OR b.title LIKE :contain_title OR b.title LIKE :last_title ORDER BY (b.title = :pre_title) ASC LIMIT $limit,$perPage");
    $query->execute([
    ':pre_title' => '%'.$_GET['q'],
    ':contain_title' => '%'.$_GET['q'].'%',
    ':last_title' => $_GET['q'].'%'
    ]);
    $sonuclar = $query->fetchAll();
    burada görüntüğü gibi getten gelen değeri 3 yerde aratıyoruz ancak birde şunu eklemek istiyorum burada yazar ismi gelir ise getten örnek "ayşe kulin" bu yazara ayit kitaplarında listelenmesi lazım bu yüzden joinlemem gerek evet ama sql tablo yapım çoktan çoğa ilişkisel tablo yapısı tablolar şu şekilde;

    books tablosu -> id - title
    books_authors tablosu -> id - bid- aid
    authors tablosu -> id - fullname

    books_authors 'da kitap id si ve yazar id sini tutuyoruz burada yazarın ismine göre kitapları nasıl listelerim?
  • 15-01-2020, 12:22:01
    #2
    SELECT B.title AS Kitapadi, A.fullname AS Yazaradi FROM books B LEFT JOIN books_authors BA ON (BA.bid = B.id) LEFT JOIN authors A ON (A.id = BA.aid) WHERE A.fullname = 'Ayşe Kulin'
    Sizin koda göre:
    https://pastebin.pl/view/6c6e136e
    Bu şekildemi düşünüyordunuz?

    (Buraya ekleyemedim, sizin kodu düzenleyip eklediğimde Cloudflare blocked hatası alıyorum r10'da)
  • 15-01-2020, 13:01:10
    #3
    @Webmerkezi; öncelikle cevabınız için teşekkürler

    $query = $db->prepare("SELECT * FROM books b
    LEFT JOIN books_authors ba ON (ba.bid = b.id)
    LEFT JOIN authors a ON (a.id = ba.aid)
    where b.status = '1' AND b.title LIKE :pre_title OR b.title LIKE :contain_title OR b.title LIKE :last_title and a.fullname LIKE :yazaradi ORDER BY b.title = :pre_title ASC LIMIT $limit,$perPage");
    $query->execute([
    ':pre_title' => '%'.$_GET['q'],
    ':contain_title' => '%'.$_GET['q'].'%',
    ':last_title' => $_GET['q'].'%',
    ':yazaradi' => '%'.$_GET['q'].'%'
    ]);
    $sonuclar = $query->fetchAll();
    bu şekilde düzelttiğmimde görmedi malesef ancak daha önce de denemiştim buna benzer olarak

    not: blok olmamak için sql sorguda ki () işaretlerini eklememeniz gerekiyor o yüzden blok almış hata var sanırım
  • 15-01-2020, 13:04:29
    #4
    emirkrgz adlı üyeden alıntı: mesajı görüntüle
    @Webmerkezi; öncelikle cevabınız için teşekkürler

    $query = $db->prepare("SELECT * FROM books b
    LEFT JOIN books_authors ba ON (ba.bid = b.id)
    LEFT JOIN authors a ON (a.id = ba.aid)
    where b.status = '1' AND b.title LIKE :pre_title OR b.title LIKE :contain_title OR b.title LIKE :last_title and a.fullname LIKE :yazaradi ORDER BY b.title = :pre_title ASC LIMIT $limit,$perPage");
    $query->execute([
    ':pre_title' => '%'.$_GET['q'],
    ':contain_title' => '%'.$_GET['q'].'%',
    ':last_title' => $_GET['q'].'%',
    ':yazaradi' => '%'.$_GET['q'].'%'
    ]);
    $sonuclar = $query->fetchAll();
    bu şekilde düzelttiğmimde görmedi malesef ancak daha önce de denemiştim buna benzer olarak

    not: blok olmamak için sql sorguda ki () işaretlerini eklememeniz gerekiyor o yüzden blok almış hata var sanırım
    Oradaki () işaretlerini ekleyip denediniz mi?
  • 15-01-2020, 13:06:19
    #5
    evet kodu buraya yazmak için kaldırdım @Webmerkezi;
  • 15-01-2020, 13:09:46
    #6
    emirkrgz adlı üyeden alıntı: mesajı görüntüle
    evet kodu buraya yazmak için kaldırdım @Webmerkezi;
    LOWER(a.fullanme) LIKE LOWER('%:yazaradi%')
    olarak deneyin