Farklı tablolarda arama hatası
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())
?>
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (5)
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.
Ç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
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.