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)))
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
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.
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ı. üç 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.
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.