v2.5.2
Giriş yap

Farklı tablolarda arama hatası

mastermst
590 defa görüntülendi ve 1 kişi tarafından değerlendirildi

Aşağıdaki kodu kullanarak iki ayrı tabloda arama yapmaya çalışıyorum tabloların sutunları tamamen aynı ancak

https://i.hizliresim.com/CAAN6B.png

linkteki hatayı veriyor. Doğrusu nedir nerede hata yapmışım? Yardım edenlere çok teşekkürler.

<?php
    
$sql = $connect->query("SELECT *  FROM oyunlar INNER JOIN programlar ON oyunlar.id = programlar.id WHERE baslik and aciklama and etiket LIKE '%".$word."%' LIMIT 7");

if ($sql->num_rows) {
    echo '<br>';
    echo '<a id="sn">Şuan da "'.$word.'" ile ilgili sitemizdeki bütün arama sonuçlarını görüyorsunuz.</a>';
    while ($row = $sql->fetch_assoc())
?>
Cevap yaz
Cevaplar (5)
aydinkeskin
1387 gün önce

yazdıklarıma sadece kendini vermeni öneririm kardeşim

aradıklarında bundan pek farklı olmayacak.

3 4 tane tabloyu birbine bağlicaksan inner join kullanıp ve tablolarındaki sütünlar aynı isimlere sahiple
sql sorgusunda bunaların adlarını değiştirip sorun çıkmamasını sağlayabailirsin

ben yine sana yazim bir örnek inner join ile


$veri = $db->prepare("
        SELECT 
            yazar.id as YazarID,
            yazar.adi as YazarAdi,
            konu.id as KonuID,
            konu.adi as KonuAdi
        FROM
            yazar
        INNER JOIN 
            konu
        ON 
            yazar.id = konu.id 
        WHERE 
            yazar.adi LIKE (:yazaradi) OR 
            konu.adi LIKE (:konuadi)
        ORDER BY yazar.id DESC LIMIT 5");
$veri->execute([
    ":yazaradi" => "%".$word."%",
    ":konuadi" => "%".$word."%"
]);
 
ne yaptık yazar ve konu tablolarını bir tabloymuş gibi sıraladık
ve aradığın kelime " ahmet " ise yazar tablosundaki adi sütünan bakar bulamaz ise konu tablosundaki adi sutununa bakar
bulursa yazdırırkenden

foreach($veri as $row){
    if($row["YazarAdi"] == ""){ // yazar adı boş ise konuadini verir
        echo $row["KonuAdi"]
    }else{
        echo $row["YazarAdi"] // yazadı adı boş değilse yazar adını verir
    }
}
//bide seninkinden yola çıkalım


$sql = $connect->query("
SELECT *  FROM 
    oyunlar 
INNER JOIN 
    programlar 
ON
    oyunlar.id = programlar.id
WHERE 
    programlar.baslik  LIKE '%".$word."%' or 
    programlar.aciklama  LIKE '%".$word."%' or 
    programlar.etiket LIKE '%".$word."%' LIMIT 7");
 
 //sanırım böyle yapsan olur alel acele bu kadar :)

bundan sonrasınıda kendine göre uyarlarsın artık herhalde :)
başkalarının yaptıklarını oku tabiki ama her zaman kendin tekrar ve tekrar yaz
yoksa sadece copy paste yaparsın ve hiç bir şey öğrenemezsin
kendi yazarak yaparsan keyif alarak yaparsın öğrendikçede hevesin artar.

mastermst
1388 gün önce

Çok güzel anlatmışsınız ama açıkcası pek bir şey anlamadım. En iyisi arama yapmak için ortak bir tablo tutayım bütün kategorilerden eklediğim şeyleri bulundursun extra olarakta ayrı ayrı kategorileride tutarım böylelikle normal şekilde bulmuş olurum biraz mantıksız ama iş görür :d

aydinkeskin
1388 gün önce

oyunlar tablonda baslik var ise
programlar tablonda baslik var ise hata verir zaten.

hangi baslik a göre belirtmemişsin

select * yerine
select

programlar.id as Pid,
urunler.id as uid,
programlar.baslik as pbaslik,
urunler.baslik as ubaslik

vs gibi işlem yap

on don sonra baslik yerine pbaslik yada programlar.baslik kullan ki düzgün olsun


ayrıca

programlar.baslik like blablabla
or
urunlar.aciklama like blablabla
or
programlar.etiket like blablabla
or
urunler.etiket like blablala

gibi yap bence.
mastermst
1388 gün önce

or olarak değiştirdim ama yine aynı hata geliyor :/

qplot
1388 gün önce

and degıl or kullanacaksın
ayrıca şu mysqli yı kullanmayın PDO kullanın çok az farkı var