En iyi sonuç

0
Onaylı Üye
Üye
Katılım
1 Ekim 2006
Mesajlar
204
Tepki puanı
0
Merhaba arkadaşlar

mysql'de arama yapmak istiyorum da, iyi sonuç veren bir yöntem bulamadım.

Şunları denedim:

PHP:
SELECT * FROM people WHERE MATCH (name,lastname,about) AGAINST ('Recep Tayyip Erdoğan') ORDER BY name,lastname ASC;

PHP:
SELECT * FROM people WHERE lastname LIKE '%Erdoğan%' || name LIKE '%Recep Tayyip%' ORDER BY name, lastname ASC

Sizin yöntemleriniz neler acaba?
 
0
Onaylı Üye
Üye
Katılım
19 Temmuz 2005
Mesajlar
2,014
Tepki puanı
1
Konum
about:blank
daha iyi sonuç derken ? bu şekildeki aramanı LIKE ile karşılayabilirsin. ama gelişmiş arama istiyorsan AGAINST kullan.

Mesela AGAINST ile bir ARMUT kelimesini ararken aynı zamanda ELMA kelimesi geçen sonuçları da çıkarabilirsin.

Hız bakımından da basit arama için sanırım LIKE daha hızlıdır. Bunu mysql kategorisinde sorarsan daha bilgili arkadaşlar var.
 
0
Onaylı Üye
Üye
Katılım
1 Ekim 2006
Mesajlar
204
Tepki puanı
0
Ya şimdi benim şöyle bir sorunum var;

Sonuçları 2 field'den çekmem lazım "name ve lastname".

PHP:
$query = "SELECT name,lastname,about,picture FROM people WHERE name LIKE '%$adi%' || lastname LIKE '%".$bol[($kac-1)]."%' ORDER BY name, lastname ASC";

Bunu kullanıyorum fakat, atıyorum "Ahmet Can" diye aradığımda şu sonuçlarıda veriyor:

Ahmet Caner, Eren Caner, Mustafa Can

Tam isabetli bir aramanın tekniğini bulamadım. En azından yeni olduğum için beceremedim.
 
0
Onaylı Üye
Üye
Katılım
29 Ekim 2005
Mesajlar
3,592
Tepki puanı
36
$query = "SELECT name,lastname,about,picture FROM people WHERE name LIKE '%$adi%' AND lastname LIKE '%".$bol[($kac-1)]."%' ORDER BY name, lastname ASC";
 
0
Onaylı Üye
Üye
Katılım
1 Ekim 2006
Mesajlar
204
Tepki puanı
0
Peki burada lastname bos olursa neden sonuç bulamaz ki?

PHP:
SELECT name,lastname,about,picture FROM people WHERE name LIKE '%Mehmet%' AND lastname LIKE '' ORDER BY name, lastname ASC
 
0
Onaylı Üye
Üye
Katılım
1 Temmuz 2006
Mesajlar
1,356
Tepki puanı
0
bunu kulaln çok işine yarayacaktır eminim be nbayağı uğraştım bu hale getirinceye kadar.
PHP:
$qtag=mysql_query("Select * from tags order by tarih DESC limit 0,10");
   while ($rtag= mysql_fetch_array($qtag)) {
$varam = $rtag['tag'];   
$varam = dur($varam);
$q=mysql_query("SELECT *, MATCH(adi, acik) AGAINST('$varam') AS score FROM table WHERE kilit=0 and MATCH(adi, acik) AGAINST('$varam') 
            ORDER BY score DESC LIMIT 0,2") or die(mysql_error());
   while ($r= mysql_fetch_array($q)) {
}
burda yapılmak istenen tags tablosundan tarihe göre alınan 10 kelimeden, her kelimeyle en alakalı 2şer sonuç elde etmek kombinasyonlar değişebilir. ancak bunu çalışması için gerekli field ların fullindexi çıkartılması gerekiyor (bknz. google). aramada sonuçları alakaya göre (score la) 1 den 0,01 e kadar alakaya göre sıraladığı için en alakalı 2 sonucu alıyoruz. Hem like kadar serverı yormaz hem alaka seviyesi çok daha iyi.
bu arada fullindex kullanımında derinlere inerseniz harika olduğunu göreceksiniz ki like ı asla tavsiye etmiyorum like la yapabileceklerinizin fazlasını fullindex arama ile yapabiliyorsunuz.
 
Geri
Üst