• 15-07-2017, 23:26:39
    #1
    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 ?
  • 20-07-2017, 17:17:34
    #2
    smhtopcu26 adlı üyeden alıntı: mesajı görüntüle
    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 ?
    Merhaba,
    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 @kullanicilar
    select 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 kullanici
    edit1: 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:05
    #3
    Bence ö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:11
    #4
    Cevaplar için teşekkür ederim sorunu daha önce cebesoft sizin yaptığınız gibi yöntemle çözdük