Merhaba Veritabanında Tablomdaki 1 Sutuna diğer tablodan çekilecek birden çok id girmek istiyorum bunu nasıl yapabilirim.
Örn: hastalik tablom var = hastalik_id , hastalik_adi olarak 2. tablom kullanıcı = kullanici_adi , kullanici_hastalik_id olarak seçilen birden falza hastalığı kullanıcıya atamak istiyorum bunu nasıl yapabilirim ?
Veritabanında Tek Sutun Çoklu Id Girme
3
●384
- 15-07-2017, 23:26:39
- 20-07-2017, 17:17:34Merhaba,smhtopcu26 adlı üyeden alıntı: mesajı görüntüle
Söylediğin gibi int bir tek sahaya birden fazla id girebileceğini zannetmiyorum.
Satır tekrarı da istemiyorsun anladığım kadarıyla.
Yazdıklarınla kafamda şöyle bir şey canlandırdım sanal tablolarla oluşturdum.
kullanici_hastalik_id kısmını varchar yapıyorsun ve idleri virgüllü olarak elle veya programından yazdırabilirsin.
Daha sonra bu fonksiyon ile varchar'da virgül ile girdiğin idleri listeye dökebilirsin.
CREATE FUNCTION [dbo].[fn_SplitString]( @Metin NVARCHAR(MAX), -- Parçalanacak Metin @Ayrac NVARCHAR(MAX)) -- Metni neye göre parçalasın ? Örnek : ',' veya '-' RETURNS @AyrismisTablo TABLE (Ids int) AS BEGIN DECLARE @Sayac INT SET @Sayac = 1 DECLARE @Index INT SET @Index = CHARINDEX(@Ayrac,@Metin) WHILE (@Index>0) BEGIN INSERT INTO @AyrismisTablo SELECT LTRIM(RTRIM(SUBSTRING(@Metin, 1, @Index - 1))) SET @Metin = SUBSTRING(@Metin, @Index + DATALENGTH(@Ayrac) / 2, LEN(@Metin)) SET @Sayac = @Sayac + 1 SET @Index = CHARINDEX(@Ayrac, @Metin) END INSERT INTO @AyrismisTablo SELECT LTRIM(RTRIM(@Metin)) RETURN END@hastaliklar tablosu

@kullanicilar tablosu

@kullanicilar + @hastaliklar verilerini içeren select sorgusu

@hastaliklar sanal tablosu
declare @hastaliklar table (hastalik_id int, hastalik_adi varchar(255)) insert into @hastaliklar select * from (values (1,'Astım'),(2,'Grip'),(3,'Alerji')) as X (A,B) select * from @hastaliklar
@kullanicilar sanal tablosu
declare @kullanicilar table (kullanici_adi varchar(50), kullanici_hastalik_id varchar(255)) insert into @kullanicilar select * from (values ('Ahmet','1'),('Mehmet','2'),('Karcan','3,1')) as X (A,B) select * from @kullanicilarselect sorgusu. (stuff ve as kullanici_hastaliklari arasında olan kısım tek sütunda birleştiren kısım.)
select kullanici.kullanici_adi, stuff((SELECT ',' + (hastalik_adi) from @hastaliklar where hastalik_id in (select * from dbo.fn_SplitString((select kullanici_hastalik_id from @kullanicilar where kullanici_adi=kullanici.kullanici_adi),',')) FOR XML PATH ('') ) ,1,1,'') as kullanici_hastaliklari from @kullanicilar as kullaniciedit1: en son kullandığım sorguda @ ile başlayan tablo isimlerini kendi tablo isimlerinle değiştirip güle güle kullanabilirsin
- 30-08-2017, 02:45:05Bence öncelikle kullanıcılar tablosuna bir id kolonu açılması!!!!


Oluşturulan kullanıcı_id alanı ve hastalik_id alanını bir tabloya insert yaptırıp

Aşağıdaki kısa sorgu ile çekmek daha kısa bir yol olacaktır.

Sonrasında istenilen programlama dili ile arayüzde istediğiniz gibi gösterebilirsiniz. - 30-08-2017, 02:51:11Cevaplar için teşekkür ederim sorunu daha önce cebesoft sizin yaptığınız gibi yöntemle çözdük


