v2.5.2
Giriş yap

MYSQL daha İNCE arama yapmak.

aydinkeskin
628 defa görüntülendi

Ö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
Cevap yaz
Cevaplar (6)
aydinkeskin
1488 gün önce

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();
	}
}
qplot
1488 gün önce

ne hıkmetse dun banada lazım oldu :) lakın gereksız seylerıde gosterıyor.

ben eslesenlerı ılk sırada getırmek ıcın kullandım guzel calısıyor lakın dedıgım gıbı gereksız seylerıde gosterıyor

gelişmeleri buradan paylaşırım o ara tayfun cevaplamazsa tabı

aydinkeskin
1489 gün önce

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
1490 gün önce

bende onlar tum terımlerı dosya olarak kaydedıyor oradan yazdıgına gore getırıyrlardır. arama kutusu ıcın bu soyledıgım

sonuclarıda kesınlıkle nodejs tarzı bır sey kullanıyorlarıdr

aydinkeskin
1490 gün önce

@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 :)

qplot
1490 gün önce

CONCAT (urunadi,' ',urunaciklamasi,' ',urunseysi) LIKE ? BUNU bır dene