MYSQL daha İNCE arama yapmak.
Özellikle @tayfunerbilen sana sesleniyor :)
mysql de boolen mode diye birşey var bilmem bilirmisiniz :)))
şaka bi yana elbet bilirsiniz de.
ben bir türlü kullanmadım.
SELECT id, adi, aciklama,katid MATCH (adi,aciklama) AGAINST ('?' IN BOOLEAN MODE)
AS sonuc FROM urunler ORDER BY sonuc DESC;
urunler tablosunda arama yaptırıcam adi ve aciklama sutunlarına göre
fakat bir türlü istediğim sonucu alamıyorum bütün verileri olsun olmasın hangi tuşa basarsam veriyor.
if (isset($_POST['term'])) {
try {
$term = $_POST['term'];
$kod = "SELECT id, adi, aciklama,katid MATCH (adi,aciklama) AGAINST ('?' IN BOOLEAN MODE)
AS sonuc FROM urunler ORDER BY sonuc DESC;";
$Arama = pre($kod);
$val = "%$term%";
$Arama->bindParam(':term', $val , PDO::PARAM_STR);
$Arama->execute();
$Count = $Arama->rowCount();
$result ="" ;
if ($Count > 0){
while($data=$Arama->fetch(PDO::FETCH_ASSOC)) {
$kodd = "SELECT * FROM urunler_kat WHERE id=?";
$kate = pre($kodd);
$kate->execute([$data["katid"]]);
$ukat = $kate->fetch(2);
$result = $result .' <li class="list-group-item">
<a href="'.TEMA.'/urun-detay/'.$data['id'].'/'.seo($ukat['adi']).'/'.seo($data['adi']).'">'.$data['adi'].'</a>
</li> ';
}
echo $result ;
// echo $kod;
}
}
catch (PDOException $e) {
echo 'Bağlantı Hatası ' . $e->getMessage();
}
}
nerde hata yapıyorum acaba
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (6)
ben bu şekilde sorunsuz kullanıyorum
sadece dediğim gibi eksik olan bir işlem var
örnek veri : ali eve giderken öldü :)
arama alanına derken yazdığımda "ali eve giderken öldü" çıkması gerekiyor ama çıkmıyor
sadece ali veya eve veya giderken veya öldü yazarsam çıkıyor..
kodlar aşağıdaki gibidir.
sende bu kodlar ile yapıyorsan score > 0 dan yaparsan net sonuç alırsın
sonuçlar sorgulanırken varsa 1 yoksa 0 olarak sonuçlanıyor score olarak listelediğin için ne varsa listeleneiyor.
@tayfunerbilen kardeşimiz eksiğimizi tamamlamıza yardımcı olursa ne mutlu bize :)
if (isset($_POST['term'])) {
try {
$term = $_POST['term'];
$sorgu ="SELECT *, MATCH(adi,aciklama) AGAINST (:aranan) AS score
FROM urunler
WHERE MATCH(adi,aciklama) AGAINST(+:aranan IN BOOLEAN MODE)
ORDER BY score > 0 DESC limit 8;";
$aranan = '*'.$term.'*';
$ara = $db->prepare($sorgu);
$ara->bindValue(':aranan', $aranan, PDO::PARAM_STR);
$ara->execute();
$Count = $ara->rowCount();
$result ="" ;
if ($Count > 0){
while($data=$ara->fetch(PDO::FETCH_ASSOC)) {
$kodd = "SELECT * FROM urunler_kat WHERE id=? ";
$kate = pre($kodd);
$kate->execute([$data["katid"]]);
$ukat = $kate->fetch(2);
$result = $result .'
<li class="list-group-item">
<a href="'.TEMA.'/urun-detay/'.$data['id'].'/'.seo($ukat['adi']).'/'.seo($data['adi']).'">
<div class="d-flex search-product align-items-center">
<img style="width:50px; height:50px;" src="'.TEMA.'/uploads/urunler/'.$data['resim'].'">
<div class="w-100 overflow--hidden">
<div style="margin-left:5px;font-weight:bold;">'.$data["adi"].' </div>
<div class="clearfix">
<div class="price-box float-left">
'.indirimfiyat($data["indirim"],$data["fiyat"]).'
</div>
<div class="stock-box float-right">
<span class="badge badge-pill '.stokrenk($data["stok"]).'">'.stoklar($data["stok"]).'</span>
</div>
</div>
</div>
</div>
</a>
</li>
';
}
echo $result ;
echo '
<li class="list-group-item ">
<a style="font:15px; font-weight:bold;" href="">Tüm Ürünler >> </a>
</li>
';
}
}
catch (PDOException $e) {
echo 'Bağlantı Hatası ' . $e->getMessage();
}
}
muhtemelen öyledir veya değildir veya başka birşeydir :D
sql sorgumu su hale kadar getirdim biraz istediğim gibi oldu fakat.
bir kaç eksik seziyorum.
$sorgu ="SELECT *, MATCH(adi,aciklama) AGAINST (:aranan) AS sonuc
FROM urunler
WHERE MATCH(adi,aciklama) AGAINST(+:aranan IN BOOLEAN MODE)
ORDER BY sonuc DESC LIMIT 8;";
burda arana kelime sonuc = 1 olanları listeliyorum tam eşleşme sağlıyor
ve ararken örnek vereyim en güzeli
iphone aradığım zaman ajax ile bana anında yazılan ilk harfle eşleşen 8 kaydı getiriyor buraya kadar herşey güzel
bana göre eksik olan kısım ise bence en can alıcı yerlerinden biri
kelime eğer : iphone 5s ise
ben phone yazınca da o iphone un çıkmasını istiyorum,
bi onu beceremedim yada üstüne uğraşmaktan da aklıma gelmiyor olabilir şu sıralar çok oluyor:)
@tayfunerbilen
senin MYSQL bilgin oldukça fazla olduğunu düşünüyorum bi el atsan sana zahmet.
@qplot cevap için teşekkürler fakat like ile yapmak istemediğim için zaten yaptım like ile yapıyorum zaten
ama performans ve kod güncelleiği açısından like artık tercih etmiyorum
bu hepsiburada trendyol vb sitelerdeki arama şablonunu nasıl yapıyorlar merak ediyorum :)