Merhaba cevaplarınız için teşekkür ederim
$ara= $urun_adi;
$parcala=explode(" ",$ara);
$sor="select * from urunler where urun_adi LIKE ";
for ($i=0;$i<count($parcala)-1;$i++){
$sor.="%$parcala[$i]%' or urun_adi LIKE ";
}
$sor.="'%$parcala[$i]%'";
$sorgu=mysql_query($sor);
if (empty($ara)){
echo 'Arama alanını boş bıraktın.';
}else{
if (@mysql_num_rows($sorgu)>0){
while($kayit=mysql_fetch_array($sorgu)){
echo $kayit["urun_adi"];
echo '<br/>';
}
}else{
echo 'Eşleşen Kayıt Yok.';
}
}bu verdiğim kod zaten explode ile parçalayıp çıkan verileri for döngüsü ile parça parça araması gerekiyor ama sadece ilk kelimeyi arıyor iki kelime olduğu zaman eşleşme olmadığı değeri çıkıyor yani
samsung
yazdığım zaman verileri takır takır döküyor ama samsung kelimesinin yanına galaxy yazarsam mesela aramayı yapmıyor yukarıdaki kodlardaki problemi çözemedim bir türlü aklımdan bir şablon oluşturdum zaten şablona göre şöyle hareket edeceğim;
- Uzak Siteden Ürün Adını, Ürün Fiyatını ve Ürünün Bulunduğu Tam Sayfa Çekilecek.
- Daha Sonra Ürün Adı Explode ile Parçalara Bölünüp Kendi Sitemdeki Veritabanında Arama Yapacak
- Eşleşen Ürünlere Teklif Olarak INSERT Edilecek
- Insert Sonucu Benim Onayımla Doğru Eklendiyse Teklif Yayınlanacak, Yanlış Eklendiyse Düzenleme ile Doğru Ürüne UPDATE Edilecek
Adımlar yukarıdaki gibi şimdi ikinci adımdayım uzak siteden çektiğim başlığı parçalara bölüp bir siteden bulduğum bu kodlar ile for döngüsü ile en çok eşleşen değerlere insert yaptırıcam. Kısaca forum sistemleri gibi düşünün içinde en alakalı kelimeler en üstte çıkıyor aynı mantığa çevirmek istiyorum ama işte bu kodlardaki sorun ne çözemedim sabahtan beri hala deniyorum. Tekrar teşekkür ederim arkadaşlar bir çözüm önerebilir misiniz?
Kodunu biraz inceledim ama bana karmaşık geldi.
ama sanıyorum çapraz arama yapmamışsın.
Tamamen mantık hatası var gibi görünüyor.
Ben sıfırdan yazdım umarım işini görür.
En çok eşleşme hangisindeyse onu buluyor ve gösteriyor.
Benim yazdığım kodda en az 1 kelime bile eşleşse buluyor ama ufak değişiklikler yaparak(limit koyarak) en alâkalı 5 sonucu da buldurtabilirsin.
Kodda istediğin kısımları kendine göre uyarlayabilirsin.
Ayrıca kendi DB'n ile değiştirmeyi unutma.
Örnek Demo:
http://www.evdekorasyonblogu.com/eslestir/ <?php
function check_if_word_exists($word,$db_baslik){
$word_pieces = explode(' ', $word);
$db_baslik_pieces = explode(' ', $db_baslik);
$num=0;
foreach($db_baslik_pieces as $db_piece){
foreach($word_pieces as $word_){
if($db_piece===$word_){$num++; break;}
}
}
if($num==0){return false;}else{return $num;}
}
function get_db_titles($table_name){//
$query = mysql_query("SELECT * FROM $table_name")or die($query."<br/><br/>".mysql_error());
if(mysql_num_rows($query)>0){
$urun_adlari=array();
while($row = mysql_fetch_array($query)){
$urun_adlari[]= $row['urun_adi'];
}
return $urun_adlari;
}else{ return false;}
}
$aranacak_baslik=$_GET['urun']; //Kaynak siteden çekilen(aranacak) ürün başlığını bu değişkene yolla.
//$db_urunler=get_db_titles('urunler');//Veritabanındaki ürün başlıklarını array içine yerleştir.
//Bende veritabanı hazırda olmadığı için bu satırı ekledim. Sen üst satırdakiyle işlemini yapacaksın.
$db_urunler=array('iphone 5', 'samsung galaxy s5', 'samsung galaxy s4', 'nokia bilmem ne', 'nokia lumnia 1536');
var_dump($db_urunler);
if(!$db_urunler){//Veritabanında karşılaştırılacak ürün bulunamadıysa hata ver.
echo "Veritabanında eşleştirilecek hiçbir ürün bulunamadı<br>";
}else{//Aksi durum için aşağıdakileri yap;
foreach($db_urunler as $db_urun_adi){//Array içindeki ürün başlıklarını string'e çevir ve döngüye gir.
//$results=array();//results adında array değişken oluştur.
$num=check_if_word_exists($aranacak_baslik,$db_urun_adi);//Aranacak kelimeyi(kaynak sitedeki başlığı) sırayla db'dekilerle karşılaştır
if($num!=false){//Eğer en az eşleşen bir kelime bulunduysa,
$results[]=array($num,$db_urun_adi);
//var_dump($results);
}
}
if(isset($results)){
echo "Aranan ürün: {$aranacak_baslik}<br><br>";
$nums=array();
foreach($results as $key => $result){
$nums[]=$result[0];
}
$max_matchednum=max($nums);
foreach($results as $key => $result){
if($result[0]==$max_matchednum){
echo "En fazla eşleşen({$result[0]} kelime eşleşti) veritabanındaki ürün adı: \"<strong>".$result[1]."</strong>\" dir.<br>";
}
}
//var_dump($results);//Eşleşenleri görmek için. İstersen kaldır.
}else{
echo "Eşleşen hiçbir ürün bulunamadı!<br>";
}
}
?>