MySQL Sorgusu (Ust seviye soru)

S

Sevgi_ve_Dostluk

Misafir
Merhabalar bu biraz zor bir soru olacak, en azindan benim icin zor :)

uyelerin tutuldugu ve uyelere ait istatistiklerin tutuldugu ayri birer tablo var benim bu uyeleri istatistiklere gore siralamam lazim, en fazla haber yazan uye en ustte olacak sekilde... Umarim en kisa surede yardimci olursunuz, simdiden tesekkurler...

NOT: istatistikler satir satir ve ayrintili tutuldugu icin ayri bir tablo acma geregi duydum aksi halde uye tablosuna bir alan daha ekleyip yazdigi haberlerin adedini tutabilirim :) Ama o zamanda gunluk, aylik gibi istatistikleri cikaramayiz.

Ha unutmadan bu konuya yazmamdaki sebep sitenin php ile calisiyor olmasidir...
 
S

Skeleton

Misafir
Kod:
SELECT Uyeler.UyeAdi
FROM Uyeler, UyeIstatistikleri
WHERE Uyeler.UyeId = UyeIstatistikleri.UyeId
ORDER BY UyeIstatistikleri.HaberSayisi DESC

gibi bir şey mi ?
 

soyturk

0
İyinet Üyesi
Katılım
17 Nisan 2005
Mesajlar
5
Reaction score
1
Konum
istanbul
$islem="select * from haberler ORDER BY uyeid DESC";
$sonuc=mysql_db_query($dbname,$islem);
while ($soyturk=mysql_fetch_array($sonuc))
{
$uyem=$soyturk['uyeid'];
$islems="select * from uyeler where id='$uyem'";
$sonucs=mysql_db_query($dbname,$islem);
while ($soyturks=mysql_fetch_array($sonucs))
{
echo" - $soyturks[uyeadi] - haber sayisi : $soyturk[sayi]";
}
}
 

soyturk

0
İyinet Üyesi
Katılım
17 Nisan 2005
Mesajlar
5
Reaction score
1
Konum
istanbul
Ama Yerinde Olsam Bu Şekilde Yapmam.

Şöyle Yaparım

2 Tablo açarım

1 - uyeler
id
uyeadi
sifre
...
...
haber

2 - habeler
id
uid // üyenin ID si
haber
...
...


Üye Girişi Yapılınca Üye haber yazarsa sessionlarda veya nerede üye bilgisini saklıyorsan haber yazılınca.

üyeler tablosunda haber bölümünü sürekli 1 arttırırsın. bunuda Şöyle yaparsın


habereklendi.php diye sallıyorum bu dosyanın içinde hem haberi ekler hemde

<?
$islems="SELECT * FROM uyeler WHERE uyeadi='$uyeadi' AND sifre='$sifre'"; // buradaki üye adı ve şifreyi sessionlardan takip edebilirsin
$sonucs=mysql_db_query($dbname,$islems);
while ($soyturk=mysql_fetch_array($sonucs))
{
$goster=$soyturk['haber'];
}
$arti=$goster + 1;
$update_sql = "UPDATE uyeler SET haber='$arti' WHERE id='$id'";
$sonucx=mysql_db_query($dbname,$update_sql);
?>


Bu sayede haberin eklendiği sayfada üyenin hesabına +1 haber daha yazılır.
Birde uyeler tablosunda haber bölümü INT ve UNSIGNED olmalı.

veriyi çekerkende

<?
$islems="SELECT * FROM uyeler ORDER by haber DESC limit 10"; // en çok haber ekleyen 10 kişi
$sonucs=mysql_db_query($dbname,$islems);
while ($soyturk=mysql_fetch_array($sonucs))
{
$uyeadi = $soyturk['uyeadi'];;
$habersayisi = $soyturk['haber'];
echo"$uyeadi ($haber)";
}
?>

İşallah işine yarar
 
S

Sevgi_ve_Dostluk

Misafir
Skelaton cok guzel yazmissin eline saglik ama tam olarak o degil fakat dogruya yakin :)

Simdi soyle
Uyeler {
id //uye sira numarasi
username //kullanici adi
userdesc //uye aciklamasi
..
}

haber {
id //haber sira numarasi
uid //haberi ekleyen kisinin id'si (user id)
yil //eklenme yili
ay //eklenme ayi
gun //eklenme gunu
..
}

Simdi soyle bugun listeleme yapacagimizda en cok haber gonderen (haber sayisi cok olan) user ve userdesc (uye aciklamasi) ustte olacak sekilde bir siralama olacak.

Uye haber eklerken otomatik olarak ekledigi haber ile birlikte bazi istatistikler de haberler tablosuna kaydediliyor.

Ben once uyelerin listesini aliyordum ve sonrada tek tek idlerini haberlerden kontrol ettiriyordum ve gonderdikleri toplam haberi mysql_num_rows ile buluyordum falan ama boyle hem cok uzun suruyor islem hem de siralama yaptiramiyorum...

Ha unutmadan haber eklemeyenlerde var tabi onlarida listelemek lazım, sifir da olsa listede kendilerini gorsunler istiyorum. ornek:

09/12/2005 Tarihinde en cok haber ekleyenler;
Sevgi_ve_Dostluk (Bilgini ve sevgini yaplas) : 25
Skelaton (Kardeslik herseydir) : 15
...
gibi.. umarim anlatabilmisimdir...
 
S

Skeleton

Misafir
PHP:
$strSql = "SELECT (u.username + ' (' + u.userdesc + ')') AS Uye, COUNT(h.id) AS HaberSayisi";
$strSql += "FROM Uyeler AS u, haber AS h";
$strSql += "WHERE u.id = h.uid AND h.yil = ".date("Y")." AND h.ay = ".date("m")." AND h.gun = ".date("d");
$strSql += "GROUP BY u.username";
$strSql += "ORDER BY COUNT(h.id) DESC";
Çalışır inşallah :)
 

Türkiye’nin ilk webmaster forum sitesi iyinet.com'da forum üyeleri tarafından yapılan tüm paylaşımlardan; Türk Ceza Kanunu’nun 20. Maddesinin, 5651 Sayılı Kanununun 4. maddesinin 2. fıkrasına göre, paylaşım yapan üyeler sorumludur.

Backlink ve Tanıtım Yazısı için iletişime geçmek için Skype Adresimiz: .cid.1580508955483fe5

Elektronik Sigara
Üst