PHP Tablodan veri alıp işleyip sonra da Sıralama

Started by dilara_87, September 05, 2009, 04:16:22 PM

Previous topic - Next topic

dilara_87

Öncelikle konuyu yanlış yere açtıysam özür dilerim.
Şu an bir çalışma yapıyorum smf üzerinde.Üye tablosundan bir üyeye ait mesaj sayısı,toplam aktif olduğu zaman,karma gibi verileri alıyorum...Bunlarla ilgili matematiksel işlemler yaparak kendime özgü bir değer oluşturuyorum...
Sorunum şu: veritabanından aldığım verileri bu son oluşturduğum değere göre sıralamak istiyorum.Bununla ilgili bilgisi olan ya da örneği olan arkadaşlardan yerdım bekliyorum...

Arbalot

#1
değerleri alıp matematisel işlemleri php ile mi yapıyorsun?

sitemin nasıl sistemini bilmeden pek yardımcı olamayız?

dilara_87

forumun veritabanından verileri alıyorum ve bunları belli katsayılarla çarpıyorum...

Toplan online süresine göre en fazla olan 10 tane kayıtı alıyorum.Bu 10 üyenin mesaj sayısını,toplam online süresini ve karmasını belli katsayılarla çarpıyorum ve bunları toplayıp puan diye bir değişken üretiyorum...
fakat sıralanırken bu oluşturduğum puana göre sıralanmasını istiyorum...
Şu an tablodan aldığım sıraya göre sıralanıyor...

husmen73 (Gulhin)

Yani hesapladığın puan'lar üyeye veriliyor değil mi?

Mesela benim üyeliğimde işlemleri yaptın 230 puan çıktı, diğer bir üyeninkini yaptın 240 çıktı. Bu çıkan puanlara göre üyelikleri sıralamak istiyorsun değil mi?
-Kurumsal Kimlik Web Tasarım Hizmeti.
Gülhin Portal Sistemi hakkında yorumlarınızı bekliyorum.
SMF
Referanslar --> http://www.gulhin.com/referanslar-portfoy/
-Web Tasarımı ve Tema Tasarımı Sitesi www.gulhin.com
-TOPLU MAİL GÖNDERİMİ --> http://www.toplumailsms.com
E-Ticaret Sistemi yaptırmak mı istiyorsunuz?

dilara_87

evet kesinlikle dediğiniz gibi...

elde ettiğim çıktı şunun gibi mesela:

ahmet 240 puan
mehmet 230 puan
ali  250 puan
veli 300 puan


ben bunları :
veli 300 puan
ali 250 puan
ahmet 240 puan
mehmet 230 puan şeklinde sıralamak istiyorum....


kullandığım döngü:

   while( $row = $DB->fetch_row() ) {

echo ' veriler';
}

husmen73 (Gulhin)

Bu puanları smf_members tablosunda yeni sütuna kaydet. Çekmek içinde şunu kullan;

SELECT memberName, puan
FROM {$db_prefix}members
ORDER BY puan DESC


Sıralamayı sağlayan kod sadece ORDER BY puan DESC kodudur. DESC azalan, ASC artan bir şekilde sıralama yapmanı sağlar.
-Kurumsal Kimlik Web Tasarım Hizmeti.
Gülhin Portal Sistemi hakkında yorumlarınızı bekliyorum.
SMF
Referanslar --> http://www.gulhin.com/referanslar-portfoy/
-Web Tasarımı ve Tema Tasarımı Sitesi www.gulhin.com
-TOPLU MAİL GÖNDERİMİ --> http://www.toplumailsms.com
E-Ticaret Sistemi yaptırmak mı istiyorsunuz?

dilara_87

order by olayını biliyorum :)
benim istediğim bu değil yani yeni tabloya koymak istemiyorum.Dizi şeklinde array ile nasıl yapabiliriz onu soruyorum...

Arbalot


ℓσяєиz

$sogru = db_query("SELECT memberName, puan FROM {$db_prefix}members ORDER BY puan DESC");
$degisken = array();
while ($deger = mysql_fetch_array($sorgu))
{
array_push($degisken);
}
print_r ($degisken);


$degisken[0]
$degisken[1] gibi sıralar
örn.

ahmet '. $degisken[1] .' puan
mehmet  '. $degisken[2] .' puan

Barış Dokumacı


MY THEMES

The greates enemy will hide in the last place you would ever lock..

dilara_87

Quote from: ℓσяєиz on September 06, 2009, 08:54:27 AM
$sogru = db_query("SELECT memberName, puan FROM {$db_prefix}members ORDER BY puan DESC");
$degisken = array();
while ($deger = mysql_fetch_array($sorgu))
{
array_push($degisken);
}
print_r ($degisken);


$degisken[0]
$degisken[1] gibi sıralar
örn.

ahmet '. $degisken[1] .' puan
mehmet  '. $degisken[2] .' puan

Tek Sorun tabloda puan diye bir sutun yok...

Yağız...


grafitus

Quote from: dilara_87 on September 06, 2009, 11:41:56 AM
Quote from: ℓσяєиz on September 06, 2009, 08:54:27 AM
$sogru = db_query("SELECT memberName, puan FROM {$db_prefix}members ORDER BY puan DESC");
$degisken = array();
while ($deger = mysql_fetch_array($sorgu))
{
array_push($degisken);
}
print_r ($degisken);


$degisken[0]
$degisken[1] gibi sıralar
örn.

ahmet '. $degisken[1] .' puan
mehmet  '. $degisken[2] .' puan

Tek Sorun tabloda puan diye bir sutun yok...

Puan derken? Karma özelliğimi?

Arbalot

@dilara_87 aradığın şey benim verdiğim fonksiyonda bitiyor...

05_MaN

#13
MySQL Kullanarak Şöyle

SELECT * FROM smf_members ORDER BY posts*3+karmaGood*2-karmaBad+totalTimeLoggedIn DESC LIMIT 0, 5

Örnek Php
<?php
echo'<table class="bordercolor" border="0" cellpadding="2" cellspacing="1" width="95%">';

$sql="SELECT * FROM smf_members ORDER BY posts*3+karmaGood*2-karmaBad+totalTimeLoggedIn DESC LIMIT 0, 5";
$query=mysql_query($sql);
while(
$uye=mysql_fetch_array($query)) {
$adi=$uye[realName];$mesaj=$uye[posts];$rep=$uye[karmaGood]-$uye[karmaBad];$sure=$uye[totalTimeLoggedIn];$puan=$uye[puan];
print
"<tr><td class='windowbg2' align='center' valign='middle'><b>$adi</b></td><td class='windowbg' align='center' valign='middle'>$mesaj</td><td class='windowbg3' align='center' valign='middle'>$rep</td><td class='windowbg' align='center' valign='middle'>$sure</td><td class='windowbg' align='center' valign='middle'>$puan</td></tr>";
}
echo
'</table>';
?>



Şöylede yapabiliyoruz (PHP)

Önce Sütunu Yapıp

Code (phpMyAdmin) Select
ALTER TABLE `smf_members` ADD `puan` BIGINT( 10 ) DEFAULT '0' NOT NULL ;

Ekteki dosyayı forum ana dizininize yükledikten sonra uygun bir yere

<iframe src ="puan.php" width="99%" height="135" scrolling="no" frameborder="1">Sizin Tarayıcınız iFrame Özelliği Desteklemiyor</iframe>

Kodunu ekliyoruz herşey hazır


@Arbalot arsort ile ben yapamadım çok merak ediyorum örnek bir kod verirsen mutlu olurum
Dizi izle WwW.DiziXizle.Com

Mp3Dinle - İndir

Eğer Gerçekten Birşeyler Yapmak İstiyorsan Önce Ne Yapcağına Karar Vermelisin .

Arbalot

bu kodlarını bir php dosyası içinde çalıştırıp sonucu görebilirsin.


$test = array(1,3,5,2,6,7,9,43,21,34,67,32);

sort($test,SORT_NUMERIC);

print_r($test);


05_MaN

yok usta onu yapıyorum elbet 2 tane diziyi bir biri ile ilişkilendirip yapmayı beceremedim

şimdi mesajlarla online sürelerini toplayıp bunu yeni bir dizide yazdırıyorum ancak arsort kullansam bile ilişki kayboluyor hep ID_MEMBER i büyük olan en üste çıkıyor :S
Dizi izle WwW.DiziXizle.Com

Mp3Dinle - İndir

Eğer Gerçekten Birşeyler Yapmak İstiyorsan Önce Ne Yapcağına Karar Vermelisin .

Arbalot

iki dizenin ilk 5 elamanını buraya yazarmısın bi bakayım

05_MaN

smf_members=>ID_MEMBER=>1,2,3,4,5
smf_members=>posts=>5,6,2,1,7
smf_members=>totalTimeLoggedIn=>7,11,3,8,6

işte şimdi şunu diyorum

şimdi sırası örnek olarak yukardaki gibi olsun

biz tototalTimeLoggedIn ile posts dizesinin elemanlarını toplayıp yeni dizede onu büyükten küçüğe sıralayıp ona göre üye bilgilerini çıkartmak istiyoruz

çıkan veri şöyle olmalı


   
      
      
üyepoststototalTimeLoggedIntoplam
puan toplamında 1.üye1.üyenin mesaj sayısı1.üyenin online olma süresi1.üyenin puanı


ama öyle olmuyor şöyle oluyor


   
      
      
üyepoststototalTimeLoggedIntoplam
ID_MEMBER ı en büyük üyeşahsın mesaj sayısımalumun online snsien büyük puan
Dizi izle WwW.DiziXizle.Com

Mp3Dinle - İndir

Eğer Gerçekten Birşeyler Yapmak İstiyorsan Önce Ne Yapcağına Karar Vermelisin .

Elmacik

05_Man, söylediğin şeyi yapmanın en kolay yolu ID_MEMBER değerlerini index numarası olarak kullanman.

Örneğin:

$posts[2467] = 56;

gibi. Değişkenle ifade edersek $posts[$ID_MEMBER] = 'ilgili üyenin post sayısı';
Böylece sort yaptığında index değerleri olduğu gibi kalacağı için tekrar ilişkilendirmene gerek kalmayacak. Eğer daha fazla değişken istersen tavsiyem şu olur:

$users = array(
array('id' => 'uye id nosu', 'posts' => 'post sayisi', 'time' => 'totaltimeLoggedIn'),
...
);

Bunları sıralamak için de array_multisort() kullanabilirsin.

Örneğin küçükten büyüğe sıralamak için:

foreach ($users as $key => $user) {
 
$posts[$key] = $user['posts'];
}
array_multisort($posts, SORT_DESC, $users);


Şimdi post sayısına göre azalan şekilde sıralamış oldun üyeleri. (Yani en büyük en başta) $users değişkenini foreach ile döndürerek ekrana yazdırdığında post sayısı en yüksek olandan başlar. Azalan sıralama istersen SORT_DESC yerine SORT_ASC kullan.

Eğer bu işine yaramazsa, kullanmak istediğin değişkenleri PHP değişkeni şeklinde yaz buraya ve ekrandaki çıktının nasıl olmasını istediğini de yaz.
Home of Elmacik

Arbalot

bende açıkcası array yapını anlamadım arrayının çıktısını print_r ile verirsen bi inceleyip ona göre bir çözüm üretelim

Advertisement: