Sql,Pyqt5 ve mükkerrer kayıt

Arkadaşlar bir sorunum var yardımınıza ihtiyacım var:)

Basit bir hasta kayıt sistemi
Bir tablewidget alanı yarattım. İçinde iki tane column (poliklinik,doktorismi) alanları var.
Veritabanındaki diyetisyen kaç tane doktor varsa tabloya girsin istiyorum
Totalde 8 tane poliklinik var her poliklinik içinde 4 tane doktor

mesela
diyetisyen şeyma gülşen
diyetisyen arif yılmaz
diyetisyen ayşe türk
diyetisyen kader yılmaz

nöroloji ahmet yılmaz
nöroloji fatma nurşen
nöroloji ahmet hakan
nöroloji dicle yanık

gibi.

Kodum şu şekilde burda sql aracılığıyla bir ayıklama lazım ama yapamadım,yardımızını talep ediyorum

    def goruntule(self):
        im.execute("SELECT poliklinik,doktorismi FROM sonkontrol")
        okuma_islemi = im.fetchall()



        self.ui.tableWidget_4.setRowCount(0)
        for row_number, row_data, in enumerate(okuma_islemi):
            self.ui.tableWidget_4.insertRow(row_number)
            for columb_number, data in enumerate(row_data):
                self.ui.tableWidget_4.setItem(row_number, columb_number, QtWidgets.QTableWidgetItem(str(data)))

Şimdiden teşekkür ediyorum

Tam olarak ne yapmak istediğinizi biraz daha açabilir misiniz?

Hocam şöyle anlatayım,anlatamadım sanırım.
Basit bir randevu sistemi yapıyorum.
8 tane poliklinik var
her poliklinikte 4 doktor var.
Hastalar farklı kullanıcı hesaplarından bu doktorlardan randevu alabiliyorlar
Mesela

Hasta kayıt sisteminde bir ekran var. Bu ekranda tablo var. Poliklinik ve doktorismi diye.

Ben bu tabloya poliklinik ve doktor isimlerini getirmek istiyorum.

Hastalar karışık randevu aldıkları için veritabanından direk poliklinik ve doktorismini çağırdığım için tablomda şöyle gözüküyor:

Diyetisyen şeyma gülşen
nöroloji arif yılmaz
KBB hatice türk
Diyetisyen ahmet zorlu
nöroloji satışmış korkmaz
KBB ali yılmaz
Diyetisyen Hasan çakır

Ama ben böyle istiyorum:

Diyetisyen hasan çakır
Diyetisyen şeyma gülşen
Diyetisyen ahmet zorlu
nöroloji satılmış korkmaz
nöroloji arif yılmaz
KBB hatice türk
KBB ali yılmaz

Birde farklı hastalar aynı doktordan randevu aldıklarında veritabanında mükerrer yani tekrar eden kayıtlar oluyor veritabanında şöyle olabiliyor
KBB aliyılmaz
KBB aliyılmaz

Ama benim tablomda sadece
Poliklinik adı karşısında doktor ismi
Bu kadar bılmıyorum anlatabildim mi, sağ olasın cevap verdiğin için

SELECT poliklinik,doktorismi FROM sonkontrol

Sorgusu direkt olarak tabloda ne var ne yok getiriyor. Eğer tekrar eden kayıtlardan kurtulmak istiyorsanız DISTINCT kullanmanız gerekiyor. Yalnız dikkat etmeniz gereken şey, DISTINCT çağrılan tüm sütunlara birlikte uygulanır. Çünkü tablonun dikdörtgen formunu korumamız gerekiyor. Kısaca, distinct varsa gelen değerler teke düşer. Sadece poliklinik çağırırsanız 8 değer döner. Çünkü 8 tane eşsiz değerim var. Eğer yanına doktoru da çağırırsanız - ki her poliklinikte 4 doktor var diyelim - 8x4=32 eşsiz değer döner.

İkinci kısımda da sıralamak istemişsiniz. Bunun için de ORDER BY kullanmanız gerekiyor. Verilen sütuna göre artan veya azalan sıralama yapıyor.

Şimdi bunları birleştirelim. :smiley:

SELECT DISTINCT poliklinik,doktorismi FROM sonkontrol ORDER BY POLIKLINIK

sıralama yönünü z’den a’ya veya 9’dan 0’a yani ters yönde yapmak isterseniz de :

SELECT DISTINCT poliklinik,doktorismi FROM sonkontrol ORDER BY POLIKLINIK DESC

Şeklinde vermeniz yeterli.

Bu arada söylemeyi unuttum, kusura bakmayın. Order by birden fazla sütun için de aynı anda kullanilabiliyor. Hatta polikliniği a’dan z’ye, bunlara denk gelen doktorları da z’den a’ya sıralayabilirsiniz de. Son olarak da Order by kullanırken sütun ismi vermeden index numarası ile de çağırabilirsiniz. Ama burada index 1’den başlıyor.

SELECT DISTINCT poliklinik,doktorismi FROM sonkontrol ORDER BY 1 DESC, 2

sen nasıl bir kralsın anlatamam
iyi ki senin gibi yazılımcılar var. öğreniyoruz sayenizde gelişiyoruz. bunu çözdüğüm için çok mutlu ettin beni.
Teşekkür ederim zihnine,emeğine sağlık kardeşim

Küçük bir hatırlatma yapayım. Sorgu çekerken tek veya çift tırnak değil, üçlü çift tırnak kullanın. Forumda denk geliyor tek tırnak, söylemek nasip olmadı. :smiley: üç tırnak atarsanız hem sorgunuz uzadıkça bir alt satıra inebilir hem de sütun isimlendirmesini çift tırnakla yaparken hatayla karşılaşmamış olursunuz.

Teşekkür ederim değerli bilgilerin için.
Aman beni takibe al nolursun
Burda senin gibi kaliteli yazılımcılar var. Ara sıra birşeyler paylaşıyorum

Birde şu var. Geri git tuşuna basarken tabloyu boşaltmasını istiyorum.

Refresh butonum var ona basınca direk yüklüyor zaten signal-slot bağlantısı ile.
Ama geri git tuşuna basınca tabloyu silmesini istiyorum
şöyle bir şey yaptım

bu başka bir tabloda örnek

    def personel_geri_kontrol(self):
        self.ui.stackedWidget.setCurrentIndex(self.personeller) # yukarda personelleri index ile numaralandırdım.
        self.ui.personel_ad_line.clear()
        self.ui.personel_soyad_line.clear()
        self.ui.personel_bolum_line.clear()
        self.ui.personel_maas_line.clear()

bunda şöyle bir sorun var. Silerken column alanlarıda siliyor.

Sütun ismi ad soyad felanken 1 2 yapıyor.
Clear komple siliyor buna bir çözüm var mı?

Qt ile pek işim olmadığı için o tarafta nasıl yapılıyor bilmesem de şahsen kolay yolu seçer boş tablo döndürürdüm.

"""SELECT 
poliklinik,
doktorismi 
FROM 
sonkontrol
WHERE 
POLIKLINIK='XYZ'"""

Böyle bir poliklinik ismi olmadığı için boş kayıt döner. Yani tabloyu silmeden boş kayıt döndürürmüş olurum. Tabii bu, muhtemelen en saçma yoldur. Ama iş görür diye düşünüyorum.

teşekkürler cevap verdiğin için. hepsini çözdüm sayende. Emeğine sağlık