Merhaba, Ziyaretçi. Lütfen giriş yapın veya üye olun.
Aktivasyon mailiniz gelmediyse buraya tıklayın.
05, 2008, 10:23:53 pm
42717 Mesaj 8081 Konu Gönderen: 17909 Üye
Son üye: bytasarimci
Turk-Php.Com Forum  |  Yardım Forumları  |  PHP Yardım Forumu  |  MySQL CSV alanlarda arama yapmak « önceki sonraki »
Sayfa: [1] Yazdır
Yazan Konu: MySQL CSV alanlarda arama yapmak  (Okunma Sayısı 677 defa)
Allow-Man
Alaattin Kahramanlar
PHP Öğrencisi
*
Offline Offline

Mesaj Sayısı: 111



Üyelik Bilgileri WWW
MySQL CSV alanlarda arama yapmak
« : 20, 2005, 02:24:12 am »

Merhaba,

MySQL veritabanımda CSV (virgülle ayrılmış) değerler tutuyorum, bu alan üzerinde arama özelliği oluşturmam gerekti. Bunu yapan özel bir fonksiyon ya da performansı düşürmeyecek algoritma önerileriniz var mı?

MySQL veri_form tablosu:

id      poses
2      12,56,89
3      54,86,9
4      23,12,54,7
5      4,5,89,12

gibi bir tablo arama formundan örneğin 12 nolu poses'i hangi id'ler kullanıyor diyeceğim ve mantıklı bir sürede arama sonuçlarını göstereceğim. Tabloda yaklaşık 500 kayıt var.

Ne dersiniz?
« Son Düzenleme: 20, 2005, 03:54:09 am Gönderen: Allow-Man » Logged

while(1) work;
serkan
Serkan Ceylani
Admin
*
Offline Offline

Mesaj Sayısı: 134


Üyelik Bilgileri WWW
Ynt: MySQL CSV alanlarda arama yapmak
« Yanıtla #1 : 20, 2005, 09:27:20 am »

Zor bir is bu Sad

12 icin boyle bir sey var:
12,5,120,3
1,12,125,8

1 veya 2 icin durum daha da karisik:
12,5,120,3
1,12,125,8

Daha degisik bir veritabani tablo yapisi kurulamazmiydi :

rid   id     poses
1     2     12
2     2     56
3     2     89
4     3     54
5     3     86
6     3     9
Logged

İletişim:

xmpp:serkan@member.turk-php.com (Jabber)

(Lütfen sorularınızı forum içinde sorunuz.)

Arşiv:
http://arsiv.turk-php.com

Serkan
Allow-Man
Alaattin Kahramanlar
PHP Öğrencisi
*
Offline Offline

Mesaj Sayısı: 111



Üyelik Bilgileri WWW
Ynt: MySQL CSV alanlarda arama yapmak
« Yanıtla #2 : 20, 2005, 09:44:18 am »

Abi şöyle bir durum; multiple select yapılabilen altı farklı combo-box'dan alınan değerler aralarına virgül konup veritabanına giriliyor ve bütün sistem bu şekilde çalışıyor yani veritabanında değişiklik yapmak ölümden beter Sad

Senin yazdığın sıkıntı sanırım

Kod:
Select id From veri_form LIKE poses '%12%'


ile arama yaparken var değil mi? Açıkçası ben bütün tabloyu çekip sonra explode edip karşılaştırmayı düşünmüştüm; senin ki baya bi daha iyi :-)

Senin yoldan giderek şöyle bir şey yapsak:

Kod:
Select id From veri_form LIKE poses '%,12,%'

Ne dersin çalışır mı?
Logged

while(1) work;
Allow-Man
Alaattin Kahramanlar
PHP Öğrencisi
*
Offline Offline

Mesaj Sayısı: 111



Üyelik Bilgileri WWW
Ynt: MySQL CSV alanlarda arama yapmak
« Yanıtla #3 : 20, 2005, 11:47:25 am »

Ben cevap vereyim çalışmaz Sad

id=12 değeri

12,32,58 şeklinde
32,12,58 şeklinde
12 şeklinde ya da;
32,56,12 şeklinde olabilir.

Virgülün başta ya da sonda ya da her ikisinde de olması kolay ama tek başına ise 12 o zaman ıı ıh...

Acaba LIKE kullanmadan id=12 diye aratıp, bir sonuç bulursa bu sonucun değerlerini arraye atıp; daha sonra LIKE'lı sorguları çalıştırıp tüm sonuçları merge mi etsem.

Bu kesinlikle çalışır ama daha optimize bir şey söyleyebilecek olan yok mu?
Logged

while(1) work;
Erman Arık
Yeni Kullanıcılar
*
Offline Offline

Mesaj Sayısı: 20


Üyelik Bilgileri
Ynt: MySQL CSV alanlarda arama yapmak
« Yanıtla #4 : 21, 2005, 08:08:47 am »

Daha optimize şeyi serkan hocamız söylemiş zaten
Logged
Allow-Man
Alaattin Kahramanlar
PHP Öğrencisi
*
Offline Offline

Mesaj Sayısı: 111



Üyelik Bilgileri WWW
Ynt: MySQL CSV alanlarda arama yapmak
« Yanıtla #5 : 21, 2005, 12:10:48 pm »

Doğrudur Serkan'ın önerisi tabii ki en iyisi ama, şu an elimde bulunan veritabanı mimarisini değiştirmeden bir çözüm üretmem gerekiyor, gerçekten yok mu bir önerisi olan?
Logged

while(1) work;
Allow-Man
Alaattin Kahramanlar
PHP Öğrencisi
*
Offline Offline

Mesaj Sayısı: 111



Üyelik Bilgileri WWW
Ynt: MySQL CSV alanlarda arama yapmak
« Yanıtla #6 : 21, 2005, 04:49:48 pm »

Bir saniye gibi bir performans kaybı ile haylice de amelece bir yolla, başka yol aklıma gelmedi, çözdüm.

Şöyle ki;

Kod:
$key = $_POST['key']
// Sadece bir posses'i olan alanlardakileri buluyor...
$sorgu[0] = "SELECT id FROM veri_form WHERE poses='$mtd'";

// Basinda ve sonunda virgul olan posesleri buluyor
$sorgu[1] = "SELECT id FROM veri_form WHERE poses LIKE '%,key,%' ";

//Posses listesinin basinda yer alanlari buluyor
$sorgu[2] = "SELECT id FROM veri_form WHERE poses LIKE '$key,%' ";

// Posses listesinin sonundakileri buluyor...
$sorgu[3] = "SELECT id FROM veri_form WHERE poses LIKE '%,$key' ";

// Sonrada bunlari birlestirip sonuc kumesini elde ediyorum

$t=0;
for($x=0; $x<4;$x++)
{
   $gelen = @mysql_query($sorgu[$x]);
   while ($data = @mysql_fetch_array($gelen)
   {
      $sonuc[$t] = $data[$id];
      $t++;
   }
}


İlginize teşekkür ederim
Logged

while(1) work;
mudkicker
Arif Ender
Admin
*
Offline Offline

Mesaj Sayısı: 873

Mastered PHP


Üyelik Bilgileri WWW
Ynt: MySQL CSV alanlarda arama yapmak
« Yanıtla #7 : 22, 2005, 09:10:10 am »

full-text search ile olabilir belki... ama mysql manualden bunu araştırın yemeyedebilir... denemekten zarar çıkmaz Wink
Logged

Allow-Man
Alaattin Kahramanlar
PHP Öğrencisi
*
Offline Offline

Mesaj Sayısı: 111



Üyelik Bilgileri WWW
Ynt: MySQL CSV alanlarda arama yapmak
« Yanıtla #8 : 22, 2005, 09:15:22 am »

MySQL 4.0.1 sürümünden sonrası FULLTEXT index'leri destekliyor lakin sunucudaki MySQL eski...

Yine de teşekkürler...

full-text search ile olabilir belki... ama mysql manualden bunu araştırın yemeyedebilir... denemekten zarar çıkmaz Wink
Logged

while(1) work;
mudkicker
Arif Ender
Admin
*
Offline Offline

Mesaj Sayısı: 873

Mastered PHP


Üyelik Bilgileri WWW
Ynt: MySQL CSV alanlarda arama yapmak
« Yanıtla #9 : 22, 2005, 09:25:50 am »

hmm... o zaman kötü.
Logged

Sayfa: [1] Yazdır 
« önceki sonraki »
Gitmek istediğiniz yer:  


Turk-Php.Com Forum | SMF Forum Software © 2005, Simple Machines LLC. All Rights Reserved.