Arama sorgularında genellikle like komutu kullanılır. Bunun nedeni like ın (
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir. den daha esnek bir yapıda olmasıdır. Mysql içinde arama yapılırken genelde tercih edilen yöntem içeriğin içindeki kelimelerin veya harf dizilimlerinin içinde arana kelimenin veya harf dizisinin geçmesidir . Yani mevcut içerikteki herhangi bir kelimede, aradığımız kelime başata,ortada veya sonda var ise o içeriği doğru içerik olarak alırız. Temel olarak arama sorgusunun mantığı budur. Bir örnek verecek olursak.
PHP Kod: Kodu kopyalamak için üzerine çift tıklayın!
$sql = "select * from `table` where `abc` like '%$aranan%'";
şeklinde olur.
% işaretleri joker karakterlerdir. Aradığımız kelime veritabanındaki metnin içindeki bir kelimienin herhengi bir yerinde (başında, sonunda, ortasında) mevcut ise o satır seçilecektir. Basit bir arama scriptini yazmada like işimiz igörebilir, fakat biz daha fazlasını istiyorsak fulltext indexleri imdadımıza koşacaktır.
LIKE tan farklı olarak fulltext indekslerini de kullanabiliriz.
MySQL fulltext indeksleri arama sorguları için
LIKE fonksiyonundan daha fonksiyoneldir.Diğer bir artısı da arama sonuçlarını önem sırasına göre dizmesidir. fulltext arama tablolardaki
VAR,
TEXT ve
VARCHAR alanlarını fulltext indeks olarak atayıp
MATCH fonksiyonunu kullanarak bunlarda arama yapmak olarak özetlenebilir. Fulltext içeriğe sahip alanları bulunan bir tabloyu şöyle yaratabiliriz.
PHP Kod: Kodu kopyalamak için üzerine çift tıklayın!
CREATE TABLE konu (id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,baslik VARCHAR(100),icerik TEXT, FULLTEXT (baslik,icerik));
Böylece konu adında bir tablo oluşturmuş olduk ve bu tablonun baslik ve icerik alanlarını fulltext olarak atıyoruz. Arama yapılacak alanları tablo oluşturulduktan sonrada fulltext index olarak da belirleyebiliriz. Bunuda şöyle yapabiliriz.
PHP Kod: Kodu kopyalamak için üzerine çift tıklayın!
ALTER TABLE `konu` ADD FULLTEXT `fulltextindex` (`baslik`,`icerik`).
İçeriklerimizi fulltext yaptıktan sonra tablomuzun şekline şöyle bir bakalım.
+----id-------+-----baslik----+-----icerik-----+ 1 Mysql Fulltext arama PHP Kod: Kodu kopyalamak için üzerine çift tıklayın!
SELECT * FROM konu WHERE MATCH (baslik,icerik) AGAINST ('arama');
sorgusu "arama" geçen icerik yada baslik alanlarına sahip satırları elde etmemizi sağlayacaktır . MATCH fonksiyonu her satıra bir puan verir. Yani aranan kelimenin içeriklerde geçme sayısına göre her satıra bir puan verir ve puanı en yüksek satırı (yani kelimenin en çok geçtiği) en üste gelecek şekilde sıralar. MATCH fonksiyonu AGAINST ten sonra verilen kelimeyi kendinden sonraki fulltext indekslerde arar. Fulltext indexlerde MATCH ile arama yapılırken küçük büyük harfin önemi yoktur. Yani kelime ile KELime aynı kelimedir.
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir. PHP Kod: Kodu kopyalamak için üzerine çift tıklayın!
SELECT id,baslik,MATCH (baslik,icerik) AGAINST ('arama') AS puan FROM konu WHERE MATCH (baslik,icerik) AGAINST ('arama');
Sorgusu içinde "arama" geçen satırların id ve baslik alanlarını ve puanları döner.
fulltext aramanın fonksiyonelliği sadece bunlarla bitmiyor.
Fulltext arama bazı operatörleri kullanmamıza olanak sağlar. Bu operatörler aranan kelimenin nasıl aranması gerektiği hakkında mysqle bilgi sağlar.
("+") kelimenin mutlaka bulunması gerektiğini belirtir Örnek: +
php
("-") kelimenin aramada bulunmamasi yani harici tutulmasi gerektiğini belirtir Örnek: +
php "
mysql php geçen
mysql geçmeyen satırlar çekilir
("< >") operatörleri kelimenin puana olan etkisini belirlemenizi sağlar.
( ) kelimeleri gruplamanızı sağlar.
("~") kelimenin aramada bulunması puanı ters yönde etkiler. Yani ("-") operatörü gibi ama arama sonuçları gösterilir.
("*") sonuna geldiği kelimenin ekli bir şekilde bulunabileceğini belirtir
''çift tırnak'' kelime grubunu arar Örnek: "ışın kılıcı"
fulltext aramada her satır için bir puan döndüğün ve sonuçları bu puana göre sıraladığını söylemiştik.
IN BOOLEAN MODE özelliğini kullanarak puana göre sıralama işlemini kapatabiliriz.
PHP Kod: Kodu kopyalamak için üzerine çift tıklayın!
SELECT * FROM konu WHERE MATCH (baslik,icerik) AGAINST ('+mysql -php' IN BOOLEAN MODE);
Sorgusu içinde mysql geçen ama php geçmeyen satırları getirir. Ama sıralamayı puan göre değil de tablodaki sıralarına göre getirir.
İyi çalışmalar.
[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]