Slider Tasarlamak

Bugün bir sitem için basit bir slider tasarladım. Nasıl tasarladığımı sizlerle paylaşıyorum. Bittiğinde şu şekilde görünecek:

Image2

ÇALIŞAN BİR ÖRNEK GÖRMEK İÇİN BURAYA TIKLAYIN

Slider, özellikle haber sitelerinde aşina olduğunuz, görsellerden oluşan bir içerik sunma aracı. Sitelerin ana sayfalarını süsleyen bu sliderların yapımı fazla da zor değil. Kendi sliderınızı tasarlamadan önce şunları bildiğinize emin olun: HTML, CSS, Java Script ve jQuery…

İlk olarak HTML ve CSS ile sliderımızın görünüşünü tasarlayalım.

Slayt 1
Bu slayt 1 için açıklama...

Slayt 2
Bu slayt 2 için açıklama...

Slayt 3
Bu slayt 3 için açıklama...

Slayt 4
Bu slayt 4 için açıklama...

HTML kodunu incelediğimizde üzerinde efekt uygulaması yapacağımız DIV elementlerine id niteliği atadığımız dikkatinizi çekmiştir. Bunların birbirinden farklı olması gereklidir. “slider” stiline sahip DIV elementinde yer verdiğimiz resimler 480×360 boyutundadır. “slider_layer” stilindeki nesnelerin aynı noktadan başlaması önemlidir. Yani aslında bu resimler üst üste binecektir. Sadece görünmesi gereken javascript yardımıyla görünür hale getirilecektir. Bunu yapmamızı sağlayan CSS kodu “position: absolute;”

HTML kodunda gÖrdüğünüz slider_layer ve nav_layer sınıflarına ait divler çoğaltılabilir. Kaç adet slayt bulunacaksa o kadar yapabilirsiniz. Ancak aynı id vermemeye dikkat edin.

Sıra geldi CSS tasarlamaya:

.slider_pad {
	float: left;
	width: 720px;
	border-bottom: 1px #EFEFEF solid;
	padding-bottom: 10px;
	margin-bottom: 10px;
}
.slider {
	float: left;
	width: 480px;
	height: 360px;
	padding-right: 10px;
	border-right: 1px #EFEFEF solid;
}
.slider_layer {
	display: none;
	position: absolute;
	width: 480px;
	height: 360px;
	overflow: hidden;
}
.slider_title {
	position: absolute;
	left: 5px;
	top: 360px;
	width: 480px;
	height: 60px;
	background-image: url('transparan_siyah.png');
}
.slider_title p {
	font-size: 10pt;
	padding: 3px 5px 3px 5px;
	color: #FFFFFF;
}
.slider_title a {
	font-size: 12pt;
	font-weight: bold;
	color: #FFCC19;
}
.navigate {
	float: left;
	width: 170px;
	height: 360px;
	margin-left: 10px;
	overflow-y: scroll;
}
.nav_layer {
	float: left;
	width: 130px;
	padding: 5px;
	margin-bottom: 10px;
	border: 1px #EFEFEF solid;
}

Kodu incelediğimizde slider_pad, tüm sliderımızı kapsayan bir çerçeve, içine “float: left;” ile divler yerleştiriyoruz. Bunların stilleri “slider” ve “navigate” olarak belirledik. “slider” stili resmin bulunduğu ana çerçeve, “navigate” stili ise büyük resmin sağındaki küçük resimler için oluşturduğumuz bir div elementi.

slider içinde iki şey bulunuyor. Biri “slider_layer”, resmin koyulacağı katman, diğeri “slider_title” yazının bulunduğu katman. Bunların başlangıç noktalarını left, top CSS kodları ile belirledik. Hareket etmesini sağlayacak güç jQuery olacak.

navigate içinde sadece “nav_layer” adında küçük resim katmanı bulunuyor. Bunlar liste şeklinde sıralanıyor, 360 pikselden büyük kısımlarının scroll oluşturmasını sağladık. Bunun için kullandığımız kod: “overflow-y: scroll;” css kodu.

HTML ve CSS işimiz bittiğine göre kodlamaya geçelim. Kodlarımız hem javascript hem jquery karışık. jQuery için mutlaka kütüphane dosyasını kullanın (ben jquery-1.10.2.min.js dosyasını kullandım).

Kodumuzu yazalım ve inceleyelim:

window.onload = slaythazirla;
var beklet;
var tiklandi = false;
var siradaki = 0;
var slaytlar = new Array();
var onceki = 0;

function slaythazirla()
{
	for ( var i = 0; i < 10; i++ )
	{
		slayt = document.getElementById( 's' + i );

		if ( slayt != null )
		{
			if ( i == 0 )
			{
				slayt.style.display = 'inline';
				$("#n" + siradaki).css({"border":"1px #9B0909 solid"});
			}

			slaytlar[siradaki] = slayt;

			var slaytRes = document.getElementById( 'n' + i );
			slaytRes.onclick = (function(k) {return function() { slaytsec(k); }; })(siradaki);

			siradaki++;
		}
	}

	siradaki = 0;
	if ( slaytlar.length > 0 )
		beklet = setTimeout( 'slaytgoster();', 500 );
}
function slaytgoster()
{
	if ( tiklandi )
		return;

	onceki = siradaki;
	siradaki = siradaki + 1;
	if ( siradaki >= slaytlar.length )
		siradaki = 0;

	$("#n" + onceki).css({"border":"1px #EFEFEF solid"});
	$("#t" + onceki).animate({top:'360px'},"slow");
	$("#s" + onceki).fadeOut(500);
	$("#s" + siradaki).fadeIn(500);
	$("#t" + siradaki).animate({top:'300px'},"slow");
	$("#n" + siradaki).css({"border":"1px #9B0909 solid"});

	var beklet = setTimeout( 'slaytgoster();', 5000 );
}
function slaytsec( sec )
{
	onceki = siradaki;
	siradaki = sec;

	$("#n" + onceki).css({"border":"1px #EFEFEF solid"});
	$("#t" + onceki).animate({top:'360px'},"slow");
	$("#s" + onceki).fadeOut(500);
	$("#s" + siradaki).fadeIn(500);
	$("#t" + siradaki).animate({top:'300px'},"slow");
	$("#n" + siradaki).css({"border":"1px #9B0909 solid"});

	tiklandi = true;
}

Başlangıçta değişkenlerimizin değerlerini girdik. Burada yer alan:

– beklet, belirli sürelerle resmin değişmesini sağlayan fonksiyon
– tiklandi, eğer sağdaki resimlerden birine tıklanırsa otomatik resim geçişini kapayan sistem için kullanacağımız değişken. Tıklandıysa true olacak, tıklanmazsa false.
– siradaki, otomatik geçişte kaçıncı slaytta olduğuna burada yer vereceğiz.
– slaytlar, bizim için html belgemizdeki tüm slaytları barındıran bir dize.
– önceki, slayt geçişlerinde bir önceki slaytın sönmesi (fadeOut) için gerekli.

“window.onload” ile HTML belgemizin yüklendiği zaman slaythazirla fonksiyonunun çağırılmasını sağladık. Ardından en fazla 10 olmak üzere slaytlarımızı (s0, s1, s2 şeklinde idleri olan divler) dize haline getirdik. Ayrıca aynı fonksiyon içinde sağ taraftaki küçük resimlere tıklandığında slaytsec() fonksiyonunun çalışmasını sağladık.

Slaytları belirledikten sonra beklet = setTimeout( ‘slaytgoster();’, 500 ); ile bir sonraki slayt geçişini ayarladık. Buradaki 500 milisaniye olup resmin daha uzun görünmesi için bunu değiştirebilirsiniz.

Belirtilen sürenin sonunda slaytgoster() devreye girdi. Tıklandıysa bu fonksiyonun görülmemesini return; ile sağladık. Sırasıyla 6 adet jQuery efekti uyguladık.

$(“#n” + onceki).css({“border”:”1px #EFEFEF solid”});
Önceki slaytın kenarlığını kırmızıdan griye çevirdi.

$(“#t” + onceki).animate({top:’360px’},”slow”);
Yazı (slider_title) kutusunun 60 piksel aşağı inmesini sağladı.

$(“#s” + onceki).fadeOut(500);
Eski resmin sönmesini sağladı (500 ms)

$(“#s” + siradaki).fadeIn(500);
Yeni slaytın görünmesini sağladı.

$(“#t” + siradaki).animate({top:’300px’},”slow”);
Yeni slayt yazısının 60 piksel yukarı çıkmasını sağladı.

$(“#n” + siradaki).css({“border”:”1px #9B0909 solid”});
Yeni slaytın küçük resminin kenarlığını kırmızı yaptı.

Ardından yine bir beklet ile belirtilen sürede sonraki slayta geçmesini sağladık.

Ve işte sliderımızın son hali: ÇALIŞAN BİR ÖRNEK GÖRMEK İÇİN BURAYA TIKLAYIN

– Ücretsiz 30 slidera göz atmak için buraya tıklayın.
– Ücretsiz farklı 15 slidera göz atmak için buraya tıklayın.
– Ücretsiz farklı 15 slidera göz atmak için buraya tıklayın.

İnternette daha yüzlerce ücretsiz slider ve nasıl yapıldığı ile ilgili doküman bulabilirsiniz.

Hepinize iyi kodlamalar!

Düzenli İfadeler

İngilizce: Regular Expression (RegEx)

Bu konuyla ilgili Türkçe kaynak araştırdım ancak fazla bulamadım. Şu kaynaktan faydalanarak bilgilerimi pekiştirdim ve şimdi öğrendiklerimi sizlerle paylaşmak istiyorum.

Çeviride “düzenli ifadeler” anlamına gelen bu kavram daha çok bir metin içerisinde kriterlerimize uyan kelime ve olayları saptamak, düzenlemek ve değiştirmek işine yarar. Birçok programlama dilinde geçerli olan bu ifadelere ingilizce “pattern” yani kalıp denmiştir.

Örnek bir kullanımdan bahsedeceksek PHP’de yazılan aşağıdaki kodu inceleyelim:

   $degisken = "Ali atta bak.";

   echo preg_replace( '~atta~i', 'ata', $degisken );

Kodu çalıştırdığımızda “atta” kelimesini “ata” kelimesine dönüştürerek bize verdiğini göreceğiz. preg_replace kullanımı preg_replace( $kalıp, $değişecek, $değişken ) şeklindedir. Burada regex yani ifademiz ‘~atta~i’ kelimesidir.

Bu kalıp ifadeler özel bir karakterle başlatılır ve aynısıyla bitirilir, sonuna da özellik değişkenleri yazılır. Örneğin yukarıdaki örnekte “i” tek satır arama yapacağımızı belirtir. “m” birden fazla satırda işlem yaparken, “s” ise nokta işaretlerine göre arama yapmamıza yardım eder. Bunlara kalıp ayarı (Pattern Modifiers) diyoruz.

Buraya kadar genel bilgiler verdik. Şimdi kalıplarda yer verdiğimiz sembolleri tanıyalım. Öncelikle aradığımız kelimeyi ~, #, \ gibi karakterlerin arasına yazarak direkt o kelimeyi bulabiliriz. Ayrıca | işareti kullanarak birden fazla olabilecek durum yazmamız mümkün:

   $degisken = 'abc';

   $degisken = preg_replace( '~a(bc|b)~i', 'Buldum!', $degisken );

   echo $degisken;

Yukarıdaki kod çalıştırıldığında değişkenimizin Buldum! olarak değiştiğini göreceğiz. “a(bc|b)” de iki olasılık var. Biri abc olmasıdır, diğeri ab olmasıdır. Her iki durumda da doğru olarak sonuç dönecektir. Ancak değişkenimiz “acd” olsaydı bu kez aynı kaldığını görecektik.

Her zaman aradığımız kelime bilinen bir şey olmayabilir, belli kalıplara göre de arama yapabiliriz. Bunun için bazı özel karakterler kullanırız. Bunlardan 3 tanesini hemen tanıyalım: * (yıldız), + (artı) ve ? (soru işareti).

(*) işareti herhangi bir şey anlamında olup sıfır karaktere de olur der ve sınırsız karaktere kadar gider. (+) ise yıldızdan farklı olarak en az 1 karakter olmasını şart koşar. (?) ise tek bir harf için joker karakter niyetine kullanılır.

Bu üç işaretten önce belli bir kural belirtilir. Kural belirtmek için [] (köşeli parantez) kullanılır. Örneğin [ABC] dersek büyük harflerle A, B ve C olabilir demektir. Diğer örneklere bakalım:

[abc] : a, b, c olabilir.
[0-9] : 0 ile 9 arasındaki tüm sayılar olabilir.
[1-3] : 1 ile 3 arasındaki tüm sayılar olabilir.
[A-Z] : Büyük harfli A’dan Z’ye tüm harfler olabilir.
[a-z] : Küçük harfli A’dan Z’ye tüm harfler olabilir.
[A-Za-z0-9] : Bir harf ya da rakam olabilir.
[-_/$. ] : -, _, /, $, . ve boşluk karakterleri olabilir.

İstersek kaç adet karakter olabileceğini de limitlememiz mümkün. Bunun için { ve } kullanılır. Arasında minimum ve en yüksek karakter sayısı yazılır.

[A-Za-z0-9 ]{1,4} : Bir, iki, üç veya 4 harfli tüm rakam, harf ve boşluk karakterler olabilir.
[1-9]{3} : 100’den 999’a kadar tüm sayılar olabilir.

Şimdiye kadar öğrendiklerimizi iki örnekte görelim.

	$degisken = "Murat 1984 yılında Samsun'da doğdu.";

	preg_match_all( '/[0-9]*/i', $degisken, $esler );

	print_r( $esler );

Yukarıdaki kod çalıştırıldığında 1984’ün seçili olduğunu görebiliriz. Ancak kurala uyan tek kelime 1984 değil, yaklaşık 32 uyan sonuç bulunur (geriye kalanlar boştur).

Ancak yukarıdaki örneği bir de artı (+) kullanarak çalıştırsaydık:

	$degisken = "Murat 1984 yılında Samsun'da doğdu.";

	preg_match_all( '/[0-9]+/i', $degisken, $esler );

	print_r( $esler );

Bu kez TEK SONUÇ çıkacaktı, o da 1984 olurdu. Bu farkın sebebi * karakteri için herhangi bir karakter olmasına gerek yok ancak + simgesi kullanırsak en az 1 adet karakter gerekli.

Şimdi bir de soru işaretini kullanarak bir örnek yapalım.

	$degisken = "Murat 1984 yılında Samsun'da doğdu.";

	$degisken = preg_replace( '/Mur[A-Za-z]?t/i', 'Mert', $degisken );

	echo $degisken;

Bize “Mert 1984 yılında Samsun’da doğdu.” şeklinde dönüş yapacaktır. [koşul]? ile belirttiğimiz yerde “a” karakteri koşulu karşılıyor ve cümle değişiyor. Ancak “a” karakteri orada olmasaydı yani “Murt” olsaydı da Mert olarak değişecekti. Çünkü soru işareti aynı zamanda opsiyonel anlamı katar. Yani olabilir de olmayabilir de.

Başka bir örneğe bakalım:

	$degisken = "Programlama demek matematik demek değildir! Mantık demektir!";

	$degisken = preg_replace( '~<[A-Za-z][A-Za-z0-9]*>~i', '', $degisken );

	echo $degisken;

Çalıştırdığımızda aslında alt yazılı ve kalın olmasını sağlayan U ve B tagları varken silindiklerini göreceğiz.

Burada kural şudur: “<[A-Za-z][A-Za-z0-9]*>“, < ile başlayan, A-Za-z ile devam eden (tek karakter) ve sonrasında A-Za-z0-9 ile devam eden (yıldız süreklilik anlamı katar) ve en sonunda > ile biten bir ifade aranmaktadır. Eğer kuralımız “<[A-Za-z0-9]*>” olsaydı bu kez HTML tagları 0-9 ile de başlayabilecekti. Ancak ilk köşeli parantezde ilk harfteki zorunluluğu [A-Za-z] olarak belirtmiş olduk.

Şimdi başka bir örnekte bir sayı dizisindeki 1000 – 9999 arasındaki sayıları preg_match_all ile bulmasını sağlayalım.

	$degisken = '1000 752 1699 10000 25 5860 880800 9800';

	preg_match_all( '~\b[1-9][0-9]{3}\b~i', $degisken, $esler );

	print_r( $esler );

Kod çalıştırıldığında şu sonucu gösterir: “Array ( [0] => Array ( [0] => 1000 [1] => 1699 [2] => 5860 [3] => 9800 ) ) ” Görüldüğü gibi tam istediğimiz aralıktaki sayıları kendisi buldu. Bunun için kullandığımız “\b[1-9][0-9]{3}\b” kuralında \b bir kelime sınırı anlamına gelmektedir. Örneğin “Ayşe topu at” kelimesinde Ayşe’deki E harfinden sonra \b gelmektedir. Dolayısıyla verdiğimiz dizede boşlukları bölerek arama yapmasını sağlamış olduk. [1-9] ilk sayısı 1 ile 9 arasında olacağını, [0-9]{3} ise sonraki 3 karakterin sayısal bir değeri olacağını belirtir.

Dikkat edildiyse yukarıda yıldız, artı ya da soru işareti kullanmadık. Bunun sebebi kalıpta olması gerekenleri tamamen yazmış olmamız. [1-9] bir karakter, [0-9]{3} üç karakter ediyor. Toplamda 4 karakterli bir şey aradığımız kesin. Karakter sayısı bilindiğine göre +, * gibi sürekli değişkenler ile olabilir ifadesi olan ? karakterlerine gerek yoktur.

Özellikle PHP BOT yazanların sıklıkla yaptığı bir yanlışa da deyinelim. Örneğin em tagları arasındaki kelimeleri almak istiyoruz. Ancak bu durumu sağlayan iki örnek varsa aç gözlü davranıp hepsini birleştirip alır. Örneğin;

“Bu <EM>birinci</EM> test” kelimesinde <herhangibirşey> yapısındaki tüm uyan ifadeleri bulacağız. Bunun için iki farklı kullanımı aynı kodda kullanalım:

	$degisken = 'Bu birinci test';

	preg_match_all( '~<.+>~i', $degisken, $bulunan1 );

	preg_match_all( '~<.+?>~i', $degisken, $bulunan2 );

	print_r( $bulunan1 );

	print_r( $bulunan2 );

Çıkan sonuçlara bakacak olursak “~<.+>~i” kalıbı kullandığımız 1. komut “<EM>birinci</EM>” şeklinde tek sonuç döndürdü. Ancak soru işareti ekleyerek oluşturduğumuz 2. kalıp “~<.+?>~i” ise soru işareti olasılık anlamı kattığı için fazla açgözlü davranmadı. İki sonuç döndürdü, bunlar da istediğimiz sonuçlar: “<EM>” ve “</EM>” sonuçları.

Son olarak bir de “Ya olmamasını istiyorsak?” diyelim ve şapkalı karakterimizi tanıtalım. Bu karakter olabilecekler listesinin en önüne konulduğunda olmamasını istediklerimiz anlamı katar. Örneğin [0-9] nasıl bir sayı olmasını istediğimizi ifade ediyorsa [^0-9] sayı olmaması anlamına gelir.

	$degisken = 'Fetih 1453 filmine gittin mi?';

	$degisken = preg_replace( '#[^A-Za-z-_ ]+\b#i', '(sayı)', $degisken );

	echo $degisken;

Yukarıda şapkayı koyarak anlattığımız köşeli parantez içindeki ifade bir harf, – (tire), _ (alt çizgi) ve boşluk olmayan ifadeleri bul anlamına geliyor. Her kelime içinde bunu araması için +’dan sonra bir de \b koyduk. Çalıştırdığımızda 1453 olan kısmın (sayı) şeklinde olduğunu saptamış olacağız.

Aslında anlatacak çok şey var ancak giriş için temel bilgiler bunlar. Fırsat bulduğumda (?>(?:>)) tarzı özel ifadelerden faydalanmayı anlatacağım.

Hepinize iyi kodlamalar!

C# Kullanarak OBEB OKEK Hesaplamak

Bu programı tasarlarken Visual C# 2005’i kullandım. Express sürümünü internetten ücretsiz indirebilirsiniz.

Yazacağımız program temelde verilen iki sayının Ortak Katlarının En Küçüğü ile Ortak Bölenlerinin En Büyüğünü verecek. Bunun için öncelikle Visual C#’ı çalıştırıp yeni bir Windows Application projesi açıyoruz.

Formumuza;
1 adet label: üzerinde Sayı: 1 yazan,
1 adet label: üzerinde Sayı: 2 yazan,
2 adet textbox, her ikisinin de içinde 0 yazan,
2 adet button,
1 adet label: üzerinde “0” yazan ekliyoruz. Aşağıdaki şekilde yerleştiriyoruz:

obebokek

Şimdi Form1.cs dosyasının içini açıyoruz. Öncelikle OBEB ve OKEK işlemini yapabilen fonksiyonları ekliyoruz.

OKEK için;

        private static int okek(int number1, int number2)
        {
            int i;
            int max = (number1 > number2) ? number1 : number2;

            for (i = max; i <= number1 * number2; i += max)
            {
                if (i % number1 == 0 && i % number2 == 0)
                    return i;
            }

            return 0;
        }

OBEB için;

        private static int obeb(int number1, int number2)
        {
            int i;
            int min = (number1 < number2) ? number1 : number2;

            for (i = min; i >= 1; --i)
                if (number1 % i == 0 && number2 % i == 0)
                    return i;

            return 0;
        }

Sonra 1. buttonun özelliklerinden Text kısmına OKEK yazıyoruz ve formda iki defa tıklayarak kod penceresini açıyoruz. Buraya aşağıdaki kodu yazıyoruz.

            label3.Text = okek(Convert.ToInt32(textBox1.Text), Convert.ToInt32(textBox2.Text)).ToString();

2. butona aynı şekilde OBEB yazıp iki defa tıkladığımızda gelen yere aşağıdaki kodu ekliyoruz:

            label3.Text = obeb(Convert.ToInt32(textBox1.Text), Convert.ToInt32(textBox2.Text)).ToString();

İşte bitti. Çalıştırdığımızda verdiğimiz iki sayının OBEB ve OKEK değerlerini hesapladığını göreceksiniz.

Veritabanı Optimizasyonu

Bu makalede MySQL’i daha az yormak, sorguların işleniş zamanlarını kısaltmak, sitenizi hızlandırmak için birtakım veritabanı optimizasyonu tavsiyelerinde bulunacağım.

Eğer kendi kodlamalarınızla veritabanı kullanacaksanız birçok mysql sorgusu ile boğuşmak durumunda kalabilirsiniz. Kullandığınız tablolar çok fazla veri içerebilir. MySQL sunucusu bu verileri işlerken tüm veritabanındaki bilgileri kontrol etmek zorunda kalıyor olabilir. Şimdi ideal bir sorgu yapısını örnekleyelim:

1. Sadece gerekli sütunları sunucudan isteyin:

Tüm sütunları istemek demek, MySQL sunucusunun fazladan ve gereksiz veri göndermesi demektir. Örneğin bir tablodaki sadece başlık ve tarih kısmını kullanmamız gerekiyorsa bunu SELECT [sütunlar] bölümünde belirtmeliyiz.

# Yanlış Kullanım:
SELECT * FROM haberler LIMIT 0, 10;

# Doğru Kullanım:
SELECT baslik, tarih FROM haberler LIMIT 0, 10;

2. ORDER BY rand() kullanımından kaçının.

Gelen verilerin sırasını bildirmemize yarayan ORDER BY komutunun yanında eklenen rand() verilerin rastgele getirilmesini ister. Fakat bu özellikle binlerce kayıt bulunan bir tabloda sunucuya extra yük bindirir. Yaklaşık 120000 kayıtlı bir tabloda rand() kullanırsak en az 0.3 saniye sürecektir sorgumuz. Oysa ideal bir sorgu 0.001-0.005 ms harcamalıdır.

# Yanlış Kullanım:
SELECT * FROM sarki_sozleri ORDER BY rand() LIMIT 0, 10;

Eğer illa ki rastgele veri almak istiyorsanız, bu işi PHP’de de yapabileceğinizi unutmayın. Böylelikle yük MySQL’den kalkacaktır.

3. INDEX kullanın.

MySQL’de verileri hızlı bir biçimde sıralamak ve karşılığında gelen veriyi bulmak için INDEX yaratmalıyız. Özellikle en çok kullanılan sütunlar için INDEX yaratırsak sunucu daha az zamanda verileri bulacaktır:

İki yolla index ekleyebilirsiniz:

# 1. Yol
ALTER TABLE tablo_adi ADD INDEX index_adi (sutun1, sutun2, ...);

# 2. Yol
CREATE INDEX index_adi ON tablo_adi (sutun1, sutun2, ...);
# Örneğin aşağıdaki tarz bir sorguyu sıkça kullanıyorsak:
SELECT baslik FROM haberler WHERE dosya = "dosya_adi" AND kategori = "1";

# Aşağıdaki gibi bir index yaratma yoluna gidebiliriz:
CREATE INDEX l_dosya_kat ON haberler (dosya, kategori);

Böylelikle bu tarz sorgular daha az zaman harcayacaktır.

Eğer tablodaki CHAR, VARCHAR, TEXT gibi yazı içeren verilerde LIKE “%kelime%” tarzı aramalar gerçekleştiriyorsanız. FULLTEXT INDEX’i kullanabilirsiniz.

# Şarkı sözü tablomuzda sözlerin bulunduğu sütuna bunu ekliyoruz.
CREATE FULLTEXT INDEX l_sozler ON sarkisozleri (sozler);

# Ve eğer sözlerde arama yapacaksak bunu kullanmamız yeterli:
SELECT isim, soz FROM sarkisozleri WHERE MATCH(sozler) AGAINST('kelime');

Yukarıdaki örnek çalıştırılsaydı içinde “kelime” geçen tüm şarkı sözleri sorgu sonucu olarak yansıtılırdı.

Umarım sizlere faydalı olur bu yazı.

Unutmadan HTML Dersleri sayfamızdan sonra MySQL Komutları sayfamız da tamamlandı. Veritabanları ile ilgili yardım için bu siteyi kullanabilirsiniz.

Fazladan Taksimli Adresler

Bugün Google’ın sitelerimden birini adres.com/dosya// şeklinde dizinine eklediğini gördüm. Normal şartlar altında böyle olmaması gerek. Ya birileri bu şekilde bağlantı verdi ve google da bu bağlantıyı kontrol etti. Ya da bir iç kod hatası sonucu bu sayfaya ulaşabildi. Ama sorun şu ki bu adreslerin düzeltilmesi ve tek bölü işareti ile yayınlanması gerekliydi.

İnternette biraz araştırdım ve benzer sorunu yaşayabilecek arkadaşlar için HTACCESS dosyasında yapacakları küçük bir düzenlemeyle buna engel olabileceklerini öğrendim.

RewriteEngine On
RewriteCond %{REQUEST_URI} ^(.*)//$
RewriteRule . http://www.adres.com%1/ [R=301]

Böylelikle ola ki arama motoru arkadaşçıl (SEF) adreslerle çalışan bir siteniz varsa yanlış bir indexlenmenin önüne geçmiş olacaksınız…