İyinet'e Hoşgeldiniz!

Türkiye'nin En Eski Webmaster Forum'una Hemen Kayıt Olun!

Kayıt Ol!

Verileri Listelemede Sorun Yaşıyorum ?

Reward Hood

0
İyinet Üyesi
Katılım
31 Aralık 2011
Mesajlar
20
Reaction score
0
İyi günler arkadaşlar,

Veritabanındaki bi tablodan, belirlediğim kriterlere göre bazı veriler çekip sıralama yapmak istiyorum. Sorumu açık bir şekilde anlatmaya çalışacağım.

Üyeler diyelim ki Ahmet ve Mehmet olsun. Bunların aktiviteleri veritabanındaki -sallıyorum- Üyelerin Aktiviteleri adlı tabloya şu şekilde işleniyor :

Üye Adı----------------Açıklama
Ahmet-------------Anket tamamladı.
Mehmet------------Anket tamamladı.
Ahmet-------------Anket tamamladı.
Ahmet-------------Anket tamamladı.
Ahmet-------------Reklama tıkladı.
Mehmet------------Anket tamamladı.
Ahmet-------------Ödeme talebi istedi.

Bu tablodan Açıklamada "Anket tamamladı" ve "Reklama tıkladı" değerine göre üye isimlerini çekip en çok anket tamamlayan ilk 10 kişiye göre ve çoktan aza sıralanan bir sıralama yapmak istiyorum;
Tabloya göre ahmet 3 anket tamamlamış ve 1 reklam banner'ına tıklamış, Ahmet'in tamamlama sayısı 4..
Mehmetse sadece 2 anket tamamlamış, onunki de 2.
Reklam tamamlama sayısına göre çoktan aza sıralayıp ilk 10 üyeyi alarak, en çok reklam yapana en yüksek ödülü verecek şekilde ve takip eden üyelere de sıralamasına göre belirleyeceğim ödül tutarında liste yapmak istiyorum.

Örnek;
En çok anket tamamlayanlar ve reklam tıklayanlar(Çoktan Aza)

Sırası-----Üye Adı------------Tamamlama sayısı---------Ödülü
--1--------Ahmet-----------------------4------------------50 USD
--2--------Mehmet----------------------2-------------------25 USD

Çok uğraştım ama birtürlü sıralamayı yapamadım. while döngüsü içinde sıraladığımdaysa tablodaki isimleri olduğu gibi listeleyip sonuçları yazıyo, yani bir ismi birden çok yazıyo tabloda birden çok olduğu için, yani şu şekil :

Üye Adı----------Tamamlama
Ahmet-----------------4
Mehmet----------------2
Ahmet-----------------4
Ahmet-----------------4
Ahmet-----------------4
Mehmet----------------2

Verileri listeleyip dizi yapıp sıralamayı filan da denedim ama malesef olmadı.. Yardımlarınızı bekliyorum..
 

garrip

0
İyinet Üyesi
Katılım
28 Aralık 2010
Mesajlar
174
Reaction score
0
Böyle karışık bir şey yapmak yerine aklıma şöyle bir şey geldi;

uye_aktivite tablon olsun yapısıda : uyeid-reklam-anket

üye her reklam tamamladığında reklam alanı, anket tamamladığında anket alanı +1 olsun

listelerkende sorgu : SELECT * FROM uye_aktivite ORDER BY anket DESC

Böyle bir şey daha kolay olur gibi...
 

Reward Hood

0
İyinet Üyesi
Katılım
31 Aralık 2011
Mesajlar
20
Reaction score
0
Elbette haklısınız ama scripti ben hazır aldım, php script olsa veritabanına girişleri ayarlayabilirim de cgi-bin ve de bir türlü okutamadım. Hemen hemen denemediğim program kalmadı ama cgi-bin dosyalarını okutamadım.. Yani demek istediğim, aktiviteler sonucunda veritabanına herhangi bir giriş yapamam script'in yaptıkları dışında :S
 

Aydın Sistem

0
İyinet Üyesi
Katılım
29 Mayıs 2011
Mesajlar
0
Reaction score
1
Konum
Polonya
Bu tarz kodlama yaparsan ileride kodlamanı değiştirmen gerekecek. Açıklama geçmişi görmek için güzel ancak her anket tamamlandığında, her reklama tıklandığında işlem kaydı girdikten hemen sonra ya da hemen önce mutlaka tiklananReklam, tamamlananAnket alanlarındaki sayı değerlerini 1 artırmanı öneririm.

Bu şekilde sistemin üzerinde olan yükü hafifletirsin. Üye sayın ve işlemler arttıkça bu bilgileri anlık olarak toplaman çok büyük bir yüke sebep olabilir.

Kısacası yaptığın kötü kodlama alışkanlığıdır.

Ben mesajımı yazarken bilgi vermişsin. Problem değil, PHP ile o veritabanına bağlanıp sayımları yapıp her üye için bu alanları yaratıp yine ekleme yapabilirsin.
 

Reward Hood

0
İyinet Üyesi
Katılım
31 Aralık 2011
Mesajlar
20
Reaction score
0
Bu tarz kodlama yaparsan ileride kodlamanı değiştirmen gerekecek. Açıklama geçmişi görmek için güzel ancak her anket tamamlandığında, her reklama tıklandığında işlem kaydı girdikten hemen sonra ya da hemen önce mutlaka tiklananReklam, tamamlananAnket alanlarındaki sayı değerlerini 1 artırmanı öneririm.

Bu şekilde sistemin üzerinde olan yükü hafifletirsin. Üye sayın ve işlemler arttıkça bu bilgileri anlık olarak toplaman çok büyük bir yüke sebep olabilir.

Kısacası yaptığın kötü kodlama alışkanlığıdır.

Ben mesajımı yazarken bilgi vermişsin. Problem değil, PHP ile o veritabanına bağlanıp sayımları yapıp her üye için bu alanları yaratıp yine ekleme yapabilirsin.

Malesef script'e müdahale edemiyorum, kendim kodlamadım script'i ve veritabanına bu şekilde ekleme yapamıyorum script'i editlemeden :S.. Bu dediğim yolun çözümü yoksa, reklamverenlerden gelecek olan postback'lere yeni bir postback ekleyip sizin dediğiniz yapmayı düşünmüştüm daha önce de zaten.. Ama bi sorayım dedim çözebilen muhakkak vardır diye hani.

Ekleme: Siz de ben mesajınıza cevap yazarken editleme yapmışsınız :) Haklısınız ama bu işlem için her defasında php sayfayı çalıştırıp fonksiyonu işletmem gerekecek. Ben otomatik artan bir sistem istiyorum. Ama dediğim gibi reklamverenlerden gelen postbacklere bi url daha eklerim, ilk url yani scriptin kendi postback sistemi bu yukarıdaki tabloyu günceller, diğer url yani benim vereceğim url de üyeleri listelediğim tabloda üyelerin reklam tamamlama kısmını her defasında artırır otomatikman :)
 

Aydın Sistem

0
İyinet Üyesi
Katılım
29 Mayıs 2011
Mesajlar
0
Reaction score
1
Konum
Polonya
Cron olarak ekleyebilirsiniz en kötü ihtimalle, yine elle çalıştırmanıza gerek kalmaz. Eğer scripte müdahale edemiyorsanız zaten içine kod sokamayacağınız için dışarıdan kod yazmak dışında pek bir çözüm göremedim açıkcası.
 

Reward Hood

0
İyinet Üyesi
Katılım
31 Aralık 2011
Mesajlar
20
Reaction score
0
Teşekürler,

O zaman ikinci yoldan çözeyim bu sorunu. Reklamverenlerin otomatik olarak göndereceği postback'i ikinci bir URL'ye yönlendirerek üyenin tamamlama sayısını artırmak en mantıklısı gibi duruyor şu anda :) ..
 

Aydın Sistem

0
İyinet Üyesi
Katılım
29 Mayıs 2011
Mesajlar
0
Reaction score
1
Konum
Polonya
Ben bu tarz işlemlerde açıkcası üyelere, ziyaretçilere yükleme yaptırtma taraftarı değilim. Cron job olarak sunucu bunu yapabilirken, ziyaretçilere, üyelere işkence çektirmek sadistlik gibi geliyor bana :)
Elbette karar sizlerin. Çalışmalarınızda başarılar dilerim.
 

Reward Hood

0
İyinet Üyesi
Katılım
31 Aralık 2011
Mesajlar
20
Reaction score
0
Ben bu tarz işlemlerde açıkcası üyelere, ziyaretçilere yükleme yaptırtma taraftarı değilim. Cron job olarak sunucu bunu yapabilirken, ziyaretçilere, üyelere işkence çektirmek sadistlik gibi geliyor bana :)
Elbette karar sizlerin. Çalışmalarınızda başarılar dilerim.

Ufak bi sorum daha olacaktı, ben dediğim gibi üye tablosuna yeni bi sütun ekledim, reklamları tamamladıklarında ilgili sütun 1 tane artıyo. Şimdi şu konuda yardım istiycektim, ben bunları tabloya nasıl listeleyebilirim ?

Username ve tamamlama sayısını tabloda listeliyorum ama ödülleri nasıl sıralamalıyım ?

Daha açık bir şekilde anlatayım :

PHP:
<?
$query = mysql_query("SELECT * FROM Members ORDER By compcount DESC LIMIT 10");

while ($list = mysql_fetch_array($query)) {
	$username = $list['Username'];
	$usercomp = $list['compcount'];

?>
<table><tr><td><?=$username;?></td><td><?=$usercomp;?></td></tr></table>
<?
	
;}

Şeklinde tabloda listeliyorum ama ben bu sıralamada başta bir sütun daha olsun ve 1,2,3,4,5.......9,10 diye sıralama yapsın ve de en sağa ekleyeceğim sütuna da benim istediğim ödül miktarını yazsın ?

Şöyle bi düşüncem var, listelediğim üye isimlerini bir diziye atsam ve bu diziden tablo üzerinde tek tek isimleri ve tamamlama sayılarını çeksem diye düşündüm şu şekilde ama olmadı ..

Kod:
<td>1</td><td><?=$dizi[0][isim];?></td><td><?=$dizi[0][tamamlama];?></td><td>$100</td>
<td>2</td><td><?=$dizi[1][isim];?></td><td><?=$dizi[1][tamamlama];?></td><td>$50</td>
<td>3</td><td><?=$dizi[2][isim];?></td><td><?=$dizi[2][tamamlama];?></td><td>$30</td>
.
.
.
<td>10</td><td><?=$dizi[9][isim];?></td><td><?=$dizi[9][tamamlama];?></td><td>$5</td>

Üye isimlerini dizi içine çekemedim listeledikten sonra...
 

Aydın Sistem

0
İyinet Üyesi
Katılım
29 Mayıs 2011
Mesajlar
0
Reaction score
1
Konum
Polonya
Selamlar,

Tam olarak istediğini anladığım söylenemez (bu arada mysql_ fonksiyonlarını kullanmayı bırakın PDO varken yıllanmış mysql_ fonksiyonları hala kullanılıyor gördükçe şaşırıyorum).

Eğer doğru olarak anladıysam döngü içerisinde $dizi değişkeni dizi (array) yaparak veri aktarmak istiyorsun. Bu durumda (senin kodlarini kullanarak);

PHP:
$dizi = array();
$i = 0;
while ($list = mysql_fetch_array($query)) {
    $dizi[$i]['isim']= $list['Username'];
    $dizi[$i]['tamamlama'] = $list['compcount'];
    $i++;
}
(Yukarıdaki kodla dizi anahtarını çekip +1 yapman halinde sıra numarasını alabilirsin ya da $i=1 olarak başlayabilir dizi anahtarını döngüye soktuğunda kullanabilirsin.)
ya da

PHP:
$dizi = array();
while ($list = mysql_fetch_array($query)) {
    $dizi[]= array('isim'=>$list['Username'], 'tamamlama'=>$list['compcount']);
}
Şeklinde yapabilirsin. 1-2-3 gibi sıralamayıda saydırmak istediğini düşünürsek en rahatı senin için ilk yol olacaktır.

Ancak burada değişkenlere atamanın pek bir anlamını göremedim. Boş yere daha fazla kaynak yemiş olacaksın. Bu durumda kötü kodlama alışkanlığıdır. Yine senin kodlarından yola çıkarak;

PHP:
$cikti  = '<table>';
$cikti .= '<thead>';
$cikti .= '<th>SIRA</th>';
$cikti .= '<th>Uye</th>';
$cikti .= '<th>Tamamlama</th>';
$cikti .= '</thead>';
$cikti .= '<tbody>';

$i = 1; # SIRAMIZI BELIRLEYECEK OLAN BU
while ($list = mysql_fetch_array($query)) {
    $cikti .= '<tr>';
    $cikti .= "<td>{$i}</td>";
    $cikti .= "<td>{$list['Username']}</td>";
    $cikti .= "<td>{$list['compcount']}</td>";
    $cikti .= '</tr>';
    $i++; # SIRAMIZI 1 SAYI ARTIRALIM
}
$cikti .= '</tbody>';
$cikti .= '</table>';

echo $cikti;

Not: $cikti değişkeninde yaptığımı açık görmen için alt alta yazmayı daha uygun gördüm. Seni anladıysam yapmak istediğin bu. Anlamadıysam biraz daha ayrıntılı, farklı bir yaklaşımla anlatabilirsen sevinirim.

Bu arada belirtmeyi unutmuşum;
PHP:
SELECT * FROM Members ORDER By compcount DESC LIMIT 10
Bu sorgunla lazım olmayan alanlarıda çekmiş olursun, senin ihtiyacın olan alan 2 alansa doğrusu aşağıdaki şekilde olmalıydı;
PHP:
SELECT Username, compcount FROM Members ORDER By compcount DESC LIMIT 10

Kodlama yaparken gereksiz yere ziyaretçinin sayfayı daha yavaş açmasına sebebiyet verecek, sunucuya daha da çok yük binderecek her türlü kötü kodlama alışkanlıklarından uzak durmanızı öneririm.
 

Reward Hood

0
İyinet Üyesi
Katılım
31 Aralık 2011
Mesajlar
20
Reaction score
0
Selamlar,

Tam olarak istediğini anladığım söylenemez (bu arada mysql_ fonksiyonlarını kullanmayı bırakın PDO varken yıllanmış mysql_ fonksiyonları hala kullanılıyor gördükçe şaşırıyorum).

Eğer doğru olarak anladıysam döngü içerisinde $dizi değişkeni dizi (array) yaparak veri aktarmak istiyorsun. Bu durumda (senin kodlarini kullanarak);

PHP:
$dizi = array();
$i = 0;
while ($list = mysql_fetch_array($query)) {
    $dizi[$i]['isim']= $list['Username'];
    $dizi[$i]['tamamlama'] = $list['compcount'];
    $i++;
}
(Yukarıdaki kodla dizi anahtarını çekip +1 yapman halinde sıra numarasını alabilirsin ya da $i=1 olarak başlayabilir dizi anahtarını döngüye soktuğunda kullanabilirsin.)
ya da

PHP:
$dizi = array();
while ($list = mysql_fetch_array($query)) {
    $dizi[]= array('isim'=>$list['Username'], 'tamamlama'=>$list['compcount']);
}
Şeklinde yapabilirsin. 1-2-3 gibi sıralamayıda saydırmak istediğini düşünürsek en rahatı senin için ilk yol olacaktır.

Ancak burada değişkenlere atamanın pek bir anlamını göremedim. Boş yere daha fazla kaynak yemiş olacaksın. Bu durumda kötü kodlama alışkanlığıdır. Yine senin kodlarından yola çıkarak;

PHP:
$cikti  = '<table>';
$cikti .= '<thead>';
$cikti .= '<th>SIRA</th>';
$cikti .= '<th>Uye</th>';
$cikti .= '<th>Tamamlama</th>';
$cikti .= '</thead>';
$cikti .= '<tbody>';

$i = 1; # SIRAMIZI BELIRLEYECEK OLAN BU
while ($list = mysql_fetch_array($query)) {
    $cikti .= '<tr>';
    $cikti .= "<td>{$i}</td>";
    $cikti .= "<td>{$list['Username']}</td>";
    $cikti .= "<td>{$list['compcount']}</td>";
    $cikti .= '</tr>';
    $i++; # SIRAMIZI 1 SAYI ARTIRALIM
}
$cikti .= '</tbody>';
$cikti .= '</table>';

echo $cikti;

Not: $cikti değişkeninde yaptığımı açık görmen için alt alta yazmayı daha uygun gördüm. Seni anladıysam yapmak istediğin bu. Anlamadıysam biraz daha ayrıntılı, farklı bir yaklaşımla anlatabilirsen sevinirim.

Bu arada belirtmeyi unutmuşum;
PHP:
SELECT * FROM Members ORDER By compcount DESC LIMIT 10
Bu sorgunla lazım olmayan alanlarıda çekmiş olursun, senin ihtiyacın olan alan 2 alansa doğrusu aşağıdaki şekilde olmalıydı;
PHP:
SELECT Username, compcount FROM Members ORDER By compcount DESC LIMIT 10

Kodlama yaparken gereksiz yere ziyaretçinin sayfayı daha yavaş açmasına sebebiyet verecek, sunucuya daha da çok yük binderecek her türlü kötü kodlama alışkanlıklarından uzak durmanızı öneririm.

Yanıtınız için çok teşekkürler..

Mysql işlemleri için yıllanmış demişsiniz de, ben PHP kodlamayla tanışalı topu topu 1-2 hafta olmuştur. Bu süre içinde incelediğim ve googlede arama yaptığım tüm başlıkların ve konu anlatımlarının hepsinde veritabanı işlemleri için mysql işlemleri kullanılmıştı. Bana rehber olacak kimse olmadığından kendi başımın çaresine bakmaya çalıştım işte, tek rehber de internetti :) ORada nasıl yapılıyosa ben de öyle yapıyorum.. Bahsettiğiniz yöntemler hakkında da araştırma yapacağım ama bu yeni yöntemler hakkında bildiğiniz rehber konu başlıkları varsa paylaşırsanız sevinirim :) Çünkü php'ye yeni başlamış biri olarak ağaç yaşken eğilir hesabı en kullanışlı ve en iyi şekilde öğrenmek isterim.
 

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.

Üst