SQL ile iki tag arasında aranan kelime varsa o satırı çekmek

prestijkorsan07

Öğrenci
Katılım
31 Ekim 2010
Mesajlar
3
Reaksiyon puanı
0
Puanları
0
Yeni şebeke AiçinC açtığımız kanallara B bu C sıcak suyun A gelişi ve soğuk C suyun gidişi için gerekli B boruları da C döşemiş olacağız




veri tabanımda bunun gibi A B ve C taglarinin bulunduğu cümleler var her satırda.
sql ile mesela 'gelişi' kelimesinin bulunduğu ve aynı zamanda bu kelimenin A C veya B C taglarinin arasında olduğu satırları çekmek istiyorum.
$a="gelişi"
//text tablodaki cümleyi içeren sütun adıdı.
select text from table where text like '%A$aC%' or text like '%B$aC%'
ilk olarak yukardakini denedim fakat her şartı sağlamıyor mesela bu kod 'için' kelimesi için :w00t: istenilen sonucu verebilir ama gelişi kelimesi için çalışmaz.bundan dolayı ben de aşağıdaki kodu denedim


$a="gelişi"
select text from table where text like '%A%$a%C%' or text like '%B%$a%C%'


fakat bu koda göre açtığımız kelimesi de A ile C taglari arasında olduğu için (ki C ile taglarin kapandığını varsayarsak normalde değil) açtığımız kelimesi için de bu istek doğru oluyor. :cursing:


sizce aranılan kelime taglarin arasındaysa texti getirmeyi nasıl yapabilirim. şimdiden teşekkürler.
 

sithlord

Öğrenci
Katılım
6 Ekim 2011
Mesajlar
38
Reaksiyon puanı
1
Puanları
0
Selam;

Bahsettigin seyi normal sql cumlecikleriyle degil regex ile yapabilirsin, kullandigin database e gore degisiklik icerecektir ama Mysql icin su sekilde olmasi lazim

select text from table where text where REGEXP 'A.*aranan_kelime.*[^ABC]C' or REGEXP 'B.*aranan_kelime.*[^ABC]C'

Kolay gelsin
 

prestijkorsan07

Öğrenci
Katılım
31 Ekim 2010
Mesajlar
3
Reaksiyon puanı
0
Puanları
0
Selam;

Bahsettigin seyi normal sql cumlecikleriyle degil regex ile yapabilirsin, kullandigin database e gore degisiklik icerecektir ama Mysql icin su sekilde olmasi lazim

select text from table where text where REGEXP 'A.*aranan_kelime.*[^ABC]C' or REGEXP 'B.*aranan_kelime.*[^ABC]C'

Kolay gelsin
Cevap verdiğin için teşekkürler. Deniyorum en kısa zamanda haber vericem.
 

prestijkorsan07

Öğrenci
Katılım
31 Ekim 2010
Mesajlar
3
Reaksiyon puanı
0
Puanları
0
verdiğin kodu denedim öncelikle şunu söliyim A B ve C tagleri <w:delText> tarzı taglerin yerini tutuyodu örnekte.
senin verdiğin örneği elimdeki taglerle değiştirince syntax hatası alıyorum denediğim kod:
Kod:
select * from james where text where regexp '<w:delText xml:space="preserve">.*they.*[^<w:delText xml:space="preserve"><w:delText></w:delText>]</w:delText>' or REGEXP '<w:delText>.*they.*[^<w:delText xml:space="preserve"><w:delText></w:delText>]</w:delText>';

sence hata nerde .
şimdiden teşekkürler :unsure:
 

sithlord

Öğrenci
Katılım
6 Ekim 2011
Mesajlar
38
Reaksiyon puanı
1
Puanları
0
Selam,

Syntax hatasi benim yuzumden olmus, ikinci where taginin orada olmamasi lazim, yazarken dalginligima gelmis ama ek olarak [^<w...] ile baslayan kisim da dogru degil. Reg ex te ^ isreti [] taglari icerisinde kullanilirsa , bu harfler bulunmasin demektir yani sadece karakter bazinda yazabilirsiniz.

Internetten mqysl regexp diye googlelayarak daha genis bilgi bulabilirsiniz.

select * from james where text regexp '<w:delText xml:space="preserve">.*they.*[^<w:delText xml:space="preserve"><w:delText></w:delText>]</w:delText>' or REGEXP '<w:delText>.*they.*[^<w:delText xml:space="preserve"><w:delText></w:delText>]</w:delText>';


Tablenizdaki stringleri buryaa yapistirirsaniz ve ne yapmak istediginizi tam yazarsaniz oradan bir fikir yurutmeye calisabiliriim.
 
Üst