Bir kolonda belli bir string içeren satırları bulmak için "like '%text%'" yapıyoruz. Tam tersini, yani elimizdeki string, bir kolondaki kelimelerden birini içeriyor mu sorgusunu nasıl yaparız? Pratik bir yolu var mı? Soru anlaşılmıştır umarım.




 

ne farkı var ben anlamadım tam olarak?

selam

cursor'la boşluk karakterine göre kelimeleri parse et. query'de OR'la like diyerek ara.
daha pratik bi yolu, belki bunun için bir function olabilir. to : google

widee

ahah evet aynı şeyi söylemişsin aslında? herhangi bir kolonda geçiyor mu diye mi bakmak istiyosun acaba?

tepedeki psychedelic adam

Yani elimizdeki string atıyorum, "Ali Veli Ahmet Mehmet". Tabloda da isim kolonunda da "Ali", "Ali Veli", "Veli Ahmet" gibi stringler içeren satırları çekmek istiyorum.

arnold schwarzeneger

mysql'dir diye tahmin ediyorum;

SELECT * FROM tablo WHERE name REGEXP 'ali|veli|ahmet|mehmet';

ali veya veli veya ahmet veya mehmet var mı diye bakıyor.

dev.mysql.com

selam

------------------
|Kolon_Adi |
-----------------|
|Ali |
|Ali Veli Memo |
|Veli Memo Alim |
|Meme |
------------------

"select * from tablo where kolon_adi like '%ali%' " gibi bir sorgu attiginizda zaten kolon_adi kolonundaki verisi "ali" ifadesini iceren tum satirlari dondurur. yani 1,2 ve 3. satirlari.

ama notepad uzerindeki ctrl+f tarzi bir arama yapmak istiyorsan, yani atiyorum tablonun kolon isimleri belli olmadigi bir senaryoda, o zaman bir script yazmak gerekebilir. tablonun sys.Columns ogelerini datatype'i '%char%' olacak sekilde cektikten sonra, cursor kullanarak elde ettigin sonucu senin istedigin parmetreler dahilinde (where kolon like '%ali%') tekrar filtre edip baska bir tabloya ya da view'e yazdirabilirsin. uzun is sanki.

daha pratik yolunu bilen varsa soylesin biz de ogrenelim.

edit: ne guzel resim cizmistim ya.. :(

trolleybus

trolleybus, durum şu;


------------------
|Kolon_Adi |
-----------------|
|Ali |
|Veli |
|Memo Hasan|
|Meme |
------------------

Benim elimde "Ali Veli" diye bir string var. Ben 1 ve 2. satırlar gelsin istiyorum. Bu arada kelime bazında da düşünmeyin. "Ahmet Memo Hasan" için de 3. satır gelmeli. Yani standark LIKE olayının ters yönlüsü.

arnold schwarzeneger

oncelikle mysql kullaniyorsan arama islemleri ile ilgili once surayi incelemeni tavsiye ederim.
dev.mysql.com

ayrica yaptigin iste istedigin seyi yanlis yoldan yapiyormussun hissine kapildim. amacin ne oldugunu daha acik yazarsan belki baska birsey dusunulebilir.

wishmaster

bunun pratik bir yolu yok. kendin nasıl kullanmayı düşünüyosan bi fonksiyon oluşturup içinde like'larla or'larla select edip döndürürsün her seferinde de bu fonksiyonu çağırırsın. ama like da işte kayıt sayısı büyüdükçe daha yavaş çalışır. belki de şu andaki problemine başka bi çözüm bulman gerekir.

tepedeki psychedelic adam

SQL Server kullanıyorum.

stackoverflow.com

Bu linkteki son cevapmış arkadaşlar. Direk ters çeviriyoruz.

arnold schwarzeneger

bu şekilde işini gördü mü peki? bende beklediğim şeyi döndürmedi mesela.
yani mesela "Memo Hasan" kayıtlı satırı döndürmüyor şu şekilde yaparsan.

Select * from tablo
where 'Memo Ahmet Mehmet' LIKE CONCAT('%',kolon,'%')

edit: tamam ben yanlış anlamışım demek.

tepedeki psychedelic adam

Döndürmeyecek zaten. Bir önceki mesajda yazmıştım. "Ahmet Memo Hasan" için o kaydı döndürmeli.

arnold schwarzeneger

bugun de biseyler ogrendik.

trolleybus

Ben de bu kadar kolay olabileceğini düşünmediğim için denememiştim bile.

arnold schwarzeneger
1

mobil görünümden çık