İyinet'e Hoşgeldiniz!

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

Kayıt Ol!

böyle bir sorgu nasıl yapılır ?

H

hoppala

Misafir
Merhaba biyerde takıldım işin içinden çıkarmıyorum...
Şimdi aşağıdaki gibi bir tablo var...

### üyeler ###
++id++ ++ulke++
1 turkey
2 germany
3 england
4 turkey
5 usa
6 turkey
7 arjantin
8 germany
.
.
.
Benim yapmak istediğim ülke kısmındaki verileri gruplayarak aşağıdaki gibi yazdırmak... (büyükten küçüğe sıralancak)

turkey(3)
germany(2)
england(1)
arjantin(1)
usa(1)


yardımcı olursanız sevinirim...
saygılar
 

Caesar

0
İyinet Üyesi
Katılım
5 Haziran 2006
Mesajlar
1,894
Reaction score
7
PHP:
$sorgu=mysql_query("select ulke from uyelik");
while ($oku=mysql_fetch_array($sorgu)) {
$sorgu2=mysql_num_rows(mysql_query("select id,ulke from uyelik where ulke='$oku[ulke]'"));
echo "$oku[ulke] ($sorgu2)<br>";
}
Bu şekilde listeler velakin büyükten küçüğe listelenmez çünkü sql yapın bu şekle göre değil onun için de farklı bir tablo oluşturup cron la yada kendin güncelleyebilirsin. onun içinde
Yeni tablo yapısı
id - ulke - sayi
1 turkey 5

id = int
ulke = varchar
sayi = int
olacak
gibi olacak;

ulkeguncelle.php
PHP:
include "baglan.php"; //mysql ayarlarının olduğu php dosyası
$sorgu=mysql_query("select ulke from uyelik");
while ($oku=mysql_fetch_array($sorgu)) {
$sorgu2=mysql_num_rows(mysql_query("select id,ulke from uyelik where ulke='$oku[ulke]'"));
$kontrol=mysql_num_rows(mysql_query("select id,ulke from yeni_tablo where ulke='$oku[ulke]'"));
if ($kontrol==0) {
mysql_query("insert into yeni_tablo values ('','$oku[ulke]','$sorgu2'"));
} else {
mysql_query("update yeni_tablo set sayi='$sorgu2' where ulke='$oku[ulke]'");
}
}
Bu ülkeler adlı istatistlik tablosunu oluşturacak;
daha sonra

ulkelistele.php
PHP:
include "baglan.php";
$sorgu=mysql_query("select sayi,ulke from yeni_tablo order by sayi desc");
while ($oku=mysql_fetch_array($sorgu)) {
echo "$oku[ulke] ($oku[sayi])<br>";
}


kolay gelsin. başka türlü olmaz sql yapın anca bu şekilde uyum gösterir.

Dipnot: ulkelistele.php nin altına bu bilgiler 24 saatte bir güncellenir dersin her gece 00:00 sularında ulkeguncelle.php yi calistirip istatistikleri güncellersin.
 

cpa

0
İyinet Üyesi
Katılım
29 Temmuz 2004
Mesajlar
102
Reaction score
0
Çözüm verilmiş ama başka bir yol da ben yazayım :

PHP:
<?php
$ulkeler = mysql_query("select ulke, count(ulke) as sayi from uyeler group by ulke order by sayi desc");
while ($ulke = mysql_fetch_assoc($ulkeler))
	echo "$ulke[ulke] ($ulke[sayi]) <br>";
?>

Bu şekilde ek tablo oluşturmadan ülke sayısına göre azalan şekilde listeletebilirsin.
 

Caesar

0
İyinet Üyesi
Katılım
5 Haziran 2006
Mesajlar
1,894
Reaction score
7
yanliz @cpa orada order by sayi demişsinya sayi zaten ek tablo ile geliyor:)
 
H

hoppala

Misafir
<?php
$ulkeler = mysql_query("select ulke, count(ulke) as sayi from uyeler group by ulke");
while ($ulke = mysql_fetch_assoc($ulkeler))
echo "$ulke[ulke] ($ulke[sayi]) <br>";
?>


peki burdan gelenleri aray'a alsak ve sayisina göre sıralatsak nasıl yapabiliriz ?
 

cpa

0
İyinet Üyesi
Katılım
29 Temmuz 2004
Mesajlar
102
Reaction score
0
Caesar' Alıntı:
yanliz @cpa orada order by sayi demişsinya sayi zaten ek tablo ile geliyor:)

count(ulke) as sayi dediğimde ek tablo mu oluşturuluyor?

hoppala' Alıntı:
peki burdan gelenleri aray'a alsak ve sayisina göre sıralatsak nasıl yapabiliriz ?

Dediğim şekilde sıralamayı da mysql'e yaptırmak yerine neden arraye atmak istiyorsun anlayamadım.
 

Caesar

0
İyinet Üyesi
Katılım
5 Haziran 2006
Mesajlar
1,894
Reaction score
7
yok hayır demek istedim sayi tablosunu ben yarattim ek tablo içinde onu kastettim.
 

cpa

0
İyinet Üyesi
Katılım
29 Temmuz 2004
Mesajlar
102
Reaction score
0
Sanırım kullandığımız terimlerden dolayı bi anlam karışıklığı oldu. Benim sütundan kastettiğim column, tablodan kastettiğim table. Verdiğim çözümde ise yeni_tablo gibi ek bir table oluşturmaya gerek kalmıyor, ben bunu demek istemiştim.
 

Caesar

0
İyinet Üyesi
Katılım
5 Haziran 2006
Mesajlar
1,894
Reaction score
7
tamam o yapılabilir ama üye sayısı büyükten küçüğe listelenemez belirtmiştim ben bunu:) arkadaş üye sayısı yüksekten aşağı doğru listelemek istiyor
 

cpa

0
İyinet Üyesi
Katılım
29 Temmuz 2004
Mesajlar
102
Reaction score
0
Bu sorguyu denediğim için yazdım isterseniz siz de deneyin. Mesela benim "loglar" isminde bir tableım var. İçerisindeki columnlar ip, islem ve tarih. Sayfaların her görüntülenmesinde tablea ip ile birlikte yapılan işlem insert ediliyor. Hangi ip, siteyi kaç kere görüntüledi bunu azalan şekilde sıralatmak istediğimde kullandığım sorgu şu :

select ip, count(ip) as sayi from loglar group by ip order by sayi desc

Yani arkadaşa verdiğim çözümde kullandığım sorgu daha önceden denenmiş bir sorgu. Ve üye sayısını en fazladan en aza doğru azalan şekilde listelemesi lazım ülkelerle birlikte. Kendisi keşke deneyip sonucu buraya yazsaydı.
 

Caesar

0
İyinet Üyesi
Katılım
5 Haziran 2006
Mesajlar
1,894
Reaction score
7
hmm direk büyükten küçüğe listelemiyor biliyorum ben bunu trislem de denemiştim başarılı olamamıştım. listeleme yapmak için order by girilen degerin field ve integer şartı olması lazım biliyorum. onun için
PHP:
order by sayi
nin yemeyeceğini düşünüyorum.
 

cpa

0
İyinet Üyesi
Katılım
29 Temmuz 2004
Mesajlar
102
Reaction score
0
Bu şekilde bir sorguyu başka yerlerde de kullandığım için kesin konuşuyorum. :)

Hatta üstte bahsettiğim tableın yapısını ve sql sorgusuna ait resultıda vereyim.

Table yapısı :
Kod:
CREATE TABLE `loglar` (
  `ip` varchar(15) NOT lisanssız default '',
  `sorgu` varchar(255) NOT lisanssız default '',
  `zaman` datetime NOT lisanssız default '0000-00-00 00:00:00',
  KEY `ip` (`ip`)
) TYPE=MyISAM;

Sorgu :
Kod:
SELECT ip, count( ip ) AS sayi FROM `loglar` GROUP BY ip ORDER BY sayi DESC LIMIT 0 , 30

Sonuç :
Kod:
ip - sayi
160.75.96.49 	1684
160.75.74.23 	585
160.75.89.72 	472
81.214.173.34 	460
160.75.96.160 	442
160.75.78.56 	427
160.75.95.47 	402
 

Caesar

0
İyinet Üyesi
Katılım
5 Haziran 2006
Mesajlar
1,894
Reaction score
7
hmm calisacaktir o zaman denemedim ben cunku order by seceneginin dediğim gibi int ve field den olusacagini dusunuyorum. o zaman arkadasa yarayacak en mantikli sorgu bu olsa gerek.
 
H

hoppala

Misafir
benim bir sorum daha olucaktı...
<?php
$ulkeler = mysql_query("select ulke, count(ulke) as sayi from uyeler group by ulke order by sayi desc");
while ($ulke = mysql_fetch_assoc($ulkeler))
echo "$ulke[ulke] ($ulke[sayi]) <br>";
?>

bunların yanına % lerini nasıl yazdırabilirim acaba uğraştımda olmadı bi türlü toplam sayı değerini bulduramıyorum
 

cpa

0
İyinet Üyesi
Katılım
29 Temmuz 2004
Mesajlar
102
Reaction score
0
PHP:
<?php
$bilgi = mysql_fetch_assoc(mysql_query("select count(id) as uye_sayisi from uyeler"));
$ulkeler = mysql_query("select ulke, count(ulke) as sayi from uyeler group by ulke order by sayi desc");
while ($ulke = mysql_fetch_assoc($ulkeler)) {
	$yuzde = ($ulke_sayi / $bilgi[uye_sayisi]) * 100;
	echo "$ulke[ulke] ($ulke[sayi]) %$yuzde<br>";
}
?>
 

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