SQL Yardım
-
Şimdi arkadaşlar bir etiket, seo vs.. gibi bir şey yapmaya çalışıyorum. Bir yerde takıldım.
Tablomda etiketler (nvarchar 255), etiketler_seo (nvarchar 255) tipinde alanlarım mevcut.
İçerisindeki veriler karşılıklı sıralı olarak şu şekilde
etiketler : Doğalgaz, Rusya, Şimdi, Büyükşehir, Keçiören etiketler_seo : dogalgaz, rusya, simdi, buyuksehir, kecioren Yapmak istediğim şu, etiket ile gelen değer kecioren diyelim. Bunun gerçek karşılığı olan Keçiören değerini veren bir sql sorgusu için yardımlarınızı bekliyorum.
Şimdiden teşekkürler.
-
Öyle iki ayrı tabloda yapana kadar bir tabloda etiketId, etiketAdi, etiketUrl olarak 3 sütun yaparsın.
Etiket adını istediğin şeyi yazarsın, sorgu olarakta select Etiketler.etiketAdi from tabloAdı as Etiketler where Etiketler.etiketUrl = 'etiketurlsi' şeklinde sorgu yaptığında, sana etiket url'si verdiğinde etiket adını geri dönderir.
Soruyu yanlış anlamışsam kusura bakma :)
Örnek vereyim,
EtiketAdi : Ahmet, EtiketUrl ahmet olarak kayıtta tuttuğun veriyi sql olarak select E.EtiketAdi from Etiketler as E where E.EtiketUrl = 'ahmet' dediğinde sana, url'si ahmet olan etiket adlarını getirir.
CEO tarafından 19/Haz/15 14:25 tarihinde düzenlenmiştir -
Hocam ayrı tabloda değil, şöyle söyleyeyim
CREATE TABLE [Haberler] ( [ID] INT PRIMARY KEY NOT NULL IDENTITY(1,1), [baslik] NVARCHAR(255), [baslik_seo] NVARCHAR(255), [etiketler] NVARCHAR(255), [etiketler_seo] NVARCHAR(255), [ozet] NVARCHAR(300), [icerik] NVARCHAR(max), [eklenme_tarihi] DATETIME NULL DEFAULT (getdate()), [okunma_sayisi] INT DEFAULT 0, [oy_sayisi] INT DEFAULT 1, [toplam_puan] INT DEFAULT 17, [sira] INT DEFAULT 0, [yayin_durumu] TINYINT DEFAULT ((0)) )
Etiketlere göre dizin oluşturuyorum ve etiketler birbirinden "," ile ayrılmış durumdadır.
-
baslik_seo like '%kecioren%'
baslik like '%Keçiören%'
davul bile dengi dengine :)
-
Müridim sen tablo yapısını baştan yanlış yapmışsın o zaman.
Etiket adında bir tablo oluşturup, konular tablosu ile ilişkilendirip join ile çağırman lazımdı etiketleri.
Öteki türlü etiketleri asp.net'te split ile bölüp, sql'de like ile çağırman lazım.
Onu da şu şekilde yapman lazım, etiketleri çağırdığın string'i programda string[] Etiketler = sqlDataReaderKolonu[0].split(','); bu şekilde yaptığında gelen sql sonucundaki virgülle ayıracak bütün dosyaları.
Programda foreach ile dönüp, örneğin lblEtiketler.text += ..... şeklinde yapman lazım.
Daha sonra adam o linke tıkladığında query strin ile, yada routedata ile gelen veriyi etiket sayfasında select * from Konular as K where etiketler_seo like '%etiketUrl%' şeklinde çağırırsan hangi konuda sorguya uygun etiket varsa gelecektir.
-
Ben mi anlamadım bilmiyorum ama istediğin şey bu mu
select etiketler from haberler where etiket_seo="kecioren"
Teldeyim pek Kodlarını göremedim
-
2 ayrı tablo yapıp, sorguyla boşuna sistemini yorma.
Bir tane çift taraflı convertor fonksiyon yaz, bak örnek var mesela şu linkteki gibi;
http://www.erbilen.net/343-php-sef-link-fonksiyonu.html
-
Arkadaşlar ben anlatamadım herhalde :)
Bir nevi sözlük gibi düşünün.
etiketler: Şakir, Hacı Ahmet, Süleyman, Tahribat şeklinde olsun
etiketler_seo: sakir, haci-ahmet, suleyman, tahribat şeklinde olsun
QueryString değerimiz suleyman olarak geldi diyelim, bu gelen değerin Süleyman olduğunu söyleyebilecek sorgu yazabilir miyiz?
-
select etiketler from haberler where Id=(select Id from haberler where etiketler_seo like '%sakir%')
bu şekilde sonuç geliyor.. şimdi sen buradan şakir i nasıl çekeceksin hocam :) yani aralarında herhangi bir bağ yok ki. türkçe karakterleri de kafana göre çeviremezsin. yani s yi hep ş yap diyemezsin...
baya uykusuzum 1.5 saat yattım o yüzden aklıma bir şey gelmedi.. buradan devam etmeye çalış, şuan elinde o satır var, bu satırdan sakir ve Şakir arasında bağ kurman gerekiyor..
replacement ile karakter değşimi yapabilirsin replace(etiketler, 'Ş','S') gibi bu da ş yi s yapıyor.. buradan yola çıkarak da bir şeyler yapabilirsin.. ayrıca split fonksiyonunu kullanıp virgüle göre böldür ve sonra karşılaştır (türkçe karakterleri replace ile değiştirdikten sonra) eğer eşitlerse (upper yap hepsini) o zaman o değeri alırsn.. ancak bu geldi aklıma
unbalanced tarafından 19/Haz/15 15:28 tarihinde düzenlenmiştir -
Galiba böyle bir şey şimdilik bir şey sözkonusu değil, aynı şekilde uykusuzluk nedeniyle ne anlattığımı bile bazen ben anlamıyorum
Şimdilik şöyle çözdüm
CREATE TABLE [Etiketler] ( [ID] INT PRIMARY KEY NOT NULL IDENTITY(1,1), [etiket] NVARCHAR(255), [etiket_seo] NVARCHAR(255), )
Sorguyu da şu şekilde yazarım
Select etiket FROM Etiketler WHERE etiket_seo = 'gelendeğer'
İlginiz için teşekkürler.
-
zaten normal olan da tabloları ayırmandı hocam :) sen tek bir tabloya etiketleri yazdırıyorsun ve işin kötüsü bir sürü etiketi tek bir field e yazdırıyorsun... Bu şekilde iş yürümez zaten. Her zaman ayırmak gerek.
kolay gelsin