Ceviz Forum

Geri Dön   Ceviz Forum > Programlama > Veritabanları & SQL

Cevapla
 
LinkBack Seçenekler
Eski 15/08/2006, 22:50   #1 (permalink)
Eski Cevizci
 
Üyelik Tarihi: 08/2004
Mesaj: 164
Varsayılan sql de distinct ifadesiyle ilgili bir problem

Merhaba arkadaşlar,eğer bir tablonun tek kolonunu kullanıyorsam sorgu sonucu eşsiz kayıtların dönmesi için distinct ifadesi işimi görüyor ancak bir tablonun birden çok kolonunu kullanıp distinct ifadesini kullanmak istediğimde distinct yokmuş gibi sonuc alıyorum.Yapmak istediğim;
topic_id,author_id,message_date i çekmek ve bunlardan topic_id si eşsiz olan kayıtların dönmesi.
"Select distinct topic_id,author_id,message_date From tblThread order by message_date desc" gibi bir ifade denedim ancak neye göre distinct konusunda herhangi bir bildirim yok,haliyle de çalışmadı.Ne dersiniz,nasıl yapabilirim?
Bu arada asıl yapmak istediğim olay,webwiz forumda son eklenen yazıların hangi konulara ne zaman ve kimler tarafından eklendiğini gösteren 5 kayıtlık döngü.Bunun için bir kaç tablo açıp kapıyorum,her döngü de rs açmalar vs. performans da düşük olacak,alternatif çözümlere açığım.Teşekkür ederim,iyi çalışmalar
__________________
"Vatan çalışkan insanların omuzlarında yükselir"
www.yucomp.org
fatihed hatta değil   Alıntı Yaparak Yanıtla
Eski 16/08/2006, 00:36   #2 (permalink)
Luke is back...
 
mkarabulut Adlı Üyenin Profil Grafiği
 
Üyelik Tarihi: 05/2002
Yer: ../Dark_Side
Mesaj: 2,443
Varsayılan

Ne yapmak istediğini anlayamadım (çok dikkatli okuyacak vaktim yoktu belki ondandır) fakat genel olarak tek bir alana göre gruplama yapıp yanında bir kaç kolon değeri daha istiyorsan bunu group by ile yapabilirsin.

Şöyle bi şeyler

SELECT id, alan1, alan2, alan3
FROM tablo
GROUP BY id
ORDER BY alan1

Id değeri eşit olan 5 tane kayıt dönüyorsa bunların sadece birisi alan1 değerine göre sıralanıp alınır.

Kusura bakma yanlış bir yanıt da vermiş olabilirim, dediğim gibi dikkatimi toplayamadım, aklıma gelen ilk şeyi yazdım.

Kolay gelsin.
__________________
Do or do not. There is no try.
mkarabulut hatta değil   Alıntı Yaparak Yanıtla
Eski 16/08/2006, 01:49   #3 (permalink)
Eski Cevizci
 
Üyelik Tarihi: 08/2004
Mesaj: 164
Varsayılan

Rica ederim,ne kusuru!Cevabınız için teşekkür ederim.Denemeler yaptım ancak ne yazık ki şimdilik bir sonuç alamadım,group by ifadesini tek başına kullanamıyorum, sum gibi bir fonksiyonla beraber kullanılması gereken bir ifade sanırım.Teşekkür ederim,denemelere devam ediyorum,iyi çalışmalar.
__________________
"Vatan çalışkan insanların omuzlarında yükselir"
www.yucomp.org
fatihed hatta değil   Alıntı Yaparak Yanıtla
Eski 16/08/2006, 08:27   #4 (permalink)
Cevizci
 
arthon Adlı Üyenin Profil Grafiği
 
Üyelik Tarihi: 07/2006
Yer: İstanbul
Mesaj: 339
Varsayılan

SELECT DISTINCT(id), alan1, alan2, alan3
FROM tablo
GROUP BY id
ORDER BY alan1

böyle dene.
daha bugün baktım tek kolona distinct yapmak istiyorsan o kolona group by kullanman şart.
arthon hatta değil   Alıntı Yaparak Yanıtla
Eski 16/08/2006, 18:24   #5 (permalink)
Eski Cevizci
 
zuzuu Adlı Üyenin Profil Grafiği
 
Üyelik Tarihi: 05/2005
Mesaj: 289
Varsayılan

Distinct ifadesi tekrarlayan satırlar içinden sadece birini döndürür.Dolayısıyla aynı satırdan çok sayıda varsa sen tek bir kolondaki değerlerin tekrar etmseini istemiyo ama diğerleri için tekrar olabilir diyorsan kullanman gereken ifade distinct değil group by olmalıdır.
Sorunun çözümü şöyle :

select t1.topic_id,max(t1.message_date) message_date
into #t
from tblthread t1
inner join tblthread t2 on t1.topic_id=t2.topic_id
group by t1.topic_id


select t.topic_id,t.message_date,author_id from tblthread th
inner join #t t on t.topic_id=th.topic_id and t.message_date=th.message_date
order by t.topic_id

Burdaki ilk ifadeyle her bir konuda gönderilen son mesajın tarihini geçici bir tabloya atıyoruz.
Son olarak da ana tabloyala bu geçici tabloyu ilişkilendirip o topic_id de o tarihte mesaj yazan kişinin id bilgisini elde ediyoruz.Hepsi bu kadar
zuzuu hatta değil   Alıntı Yaparak Yanıtla
Eski 16/08/2006, 19:43   #6 (permalink)
Eski Cevizci
 
Üyelik Tarihi: 08/2004
Mesaj: 164
Varsayılan

Öncelikle cevaplar için teşekkür ederim,
Select distinct(topic_id),author_idmessage_date from tblthread group by topic_id order by message_date"

Bu sql cümleciği
"You tried to execute a query that does not include the specified expression 'author_id' as part of an aggregate function." Hatasını döndürüyor.

select t1.topic_id,max(t1.message_date) message_date into #t from tblthread t1 inner join tblthread t2 on t1.topic_id=t2.topic_id group by t1.topic_id

Bu da "Syntax error (missing operator) in query expression 'max(t1.message_date) message_date'. "Hatasını döndürüyor.Ben sql cümleciklerinde nokta söz dizimini kullanmadığım için bu sözdizimi hatasına da dokunamadım,belki çok kolay birşeydir.
Cevaplarınız için teşekkür ediyorum,uğraşmaya devam edelim bakalım...İyi çalışmalar dilerim
__________________
"Vatan çalışkan insanların omuzlarında yükselir"
www.yucomp.org
fatihed hatta değil   Alıntı Yaparak Yanıtla
Eski 16/08/2006, 19:53   #7 (permalink)
Eski Cevizci
 
zuzuu Adlı Üyenin Profil Grafiği
 
Üyelik Tarihi: 05/2005
Mesaj: 289
Varsayılan

Ben kendi yolladığım 2 sql i çalıştırdığımda doğru sonucu alıyorum.
Ben sql cümleciklerinde nokta söz dizimini kullanmadığım için bu sözdizimi hatasına da dokunamadım,belki çok kolay birşeydir demişsin nokta söz diziminden kastın nedir???

Ayrıca
Select distinct(topic_id),author_id,message_date from tblthread group by topic_id order by message_date"
Bu sql cümleciği "You tried to execute a query that does not include the specified expression 'author_id' as part of an aggregate function." Hatasını döndürüyor demişsin tabiki .
Çünkü gruplama fonksyionu içerisinde kullanmadığın(gruplama fonksiyonları:sum,avg,max vs..) her alanı group by ifadene eklemn gerekir.


Diğer ifadeyi de şöyle dene bakalım:
select t1.topic_id,max(t1.message_date) AS message_date into #t from tblthread t1 inner join tblthread t2 on t1.topic_id=t2.topic_id group by t1.topic_id
zuzuu hatta değil   Alıntı Yaparak Yanıtla
Eski 19/08/2006, 16:12   #8 (permalink)
Cevizci
 
emirci Adlı Üyenin Profil Grafiği
 
Üyelik Tarihi: 10/2002
Mesaj: 48
Varsayılan

Alıntı:
mkarabulut, mesajından alıntı: Mesajı Gör
Ne yapmak istediğini anlayamadım (çok dikkatli okuyacak vaktim yoktu belki ondandır) fakat genel olarak tek bir alana göre gruplama yapıp yanında bir kaç kolon değeri daha istiyorsan bunu group by ile yapabilirsin.

Şöyle bi şeyler

SELECT id, alan1, alan2, alan3
FROM tablo
GROUP BY id
ORDER BY alan1

Id değeri eşit olan 5 tane kayıt dönüyorsa bunların sadece birisi alan1 değerine göre sıralanıp alınır.

Kusura bakma yanlış bir yanıt da vermiş olabilirim, dediğim gibi dikkatimi toplayamadım, aklıma gelen ilk şeyi yazdım.

Kolay gelsin.

Çok güzel bu çok işime yaradı peki boş kayıtları çekmemesi için ne yapabilirim
emirci hatta değil   Alıntı Yaparak Yanıtla
Eski 19/08/2006, 17:13   #9 (permalink)
Cevizci
 
emirci Adlı Üyenin Profil Grafiği
 
Üyelik Tarihi: 10/2002
Mesaj: 48
Varsayılan

Çok afedersiniz çok dikkatli incelemeden yazdım ama malesef istediğim olmamış. Durum şu şekilde bir tabloda 5 tane alan var ve ben ve bualaln ların içinde tekrarlı kelime sayısı bir den fazla örnegin 100 tane otomobil var ve her satırı da otomobil adın da sutun var ve marka adın surun var markada da yine örnegin volvo dan 50 satır var ben bu iki işlemi aynı sorgu içinde yaparak sayfa da sıralama sitili yapmak istedim bunu once distinct ile yaptım olmadı GROUP BY ile yaptım oldu ama sadece tek sutuna mudahale edebiliyorum. Otomobil Sutunanna GROUP BY OTOMOBIL yapınca oluyor GROUP BY otomobil,marka yaptıgım da karşıyorlar Bunu nasıl yapabilirim.

Saygılarımla.
emirci hatta değil   Alıntı Yaparak Yanıtla
Eski 19/08/2006, 17:47   #10 (permalink)
Eski Cevizci
 
zuzuu Adlı Üyenin Profil Grafiği
 
Üyelik Tarihi: 05/2005
Mesaj: 289
Varsayılan

İstediğin şekilde örnek bir data gönderirsen daha anlaşılır olur. Tam olarak alanların adını vs yazar mısın?
zuzuu hatta değil   Alıntı Yaparak Yanıtla
Cevapla

Bookmarks

Seçenekler

Mesaj Yazma Hakları
Yeni mesajgöndermezsiniz
Cevap yazamazsınız
Dosya ekleyemezsiniz
Mesajınızı düzenleyemezsiniz

BB code is Açık
[IMG] kodu Açık
HTML kodu Kapalı
Trackbacks are Açık
Pingbacks are Açık
Refbacks are Açık

Benzer Konular
Konu Konuyu açana göre Forum Cevap En Son Mesaj
Windows ile ilgili problem (yardim) eindoforat Windows 5 01/01/2007 14:08
Javada for dongusu ile ilgili bir problem... garalo Java / JSP 2 15/06/2006 17:58
Dosya upload ile ilgili problem metoikos PHP 2 21/11/2005 17:18
mySQL DISTINCT problem aglia Veritabanları & SQL 4 20/07/2005 18:50
tr karaktere dönüştürme ile ilgili bi problem trex PHP 1 17/09/2004 09:43


Forum saati Türkiye saatine göredir. GMT +3. Şu anda saat 20:06.

Reklamlar & Desteklenenler
Hassas Valf | Hassas Kaplama | Antalyamız | Gazete | Ticari Bilişim | Hakan Müştak | Rüya Tabirleri | Kadın | Hastalıklar | Cepte msn ve e-posta | Webmaster | Antalya Aupair | Turkish Property Antalya | Forum | Chat | Perde | Adsl | Araba | bolindir.com | guncelle.com | livescore | Web Tasarım | evden eve nakliyat | forum | evden eve | sohbet | Resimcim| Kalifiye İnsan Kaynakları | Web Tasarım | Oyun | Yusuf KOÇ | Akın Yorulmaz | şiir | UFO | Web Tasarım | Oyunlar | Canlı Tv |


Forum Yazılımı: vBulletin Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0
Copyright ©2001 - 2008, Ceviz.net