Jump to content
Forumu Destekleyenlere Katılın ×
Paticik Forumları
2000 lerden beri faal olan, çok şukela bir paylaşım platformuyuz. Hoşgeldiniz.

Yeni sql sorusu =) İstatistikler yapmak


Öne çıkan mesajlar

Mesaj tarihi:
Burda çok şey öğrendim riglous'da çok yardım etti sağolsun şimdi yeni bir soru ile karşınızdayım =)

Şimdi istatistikler yapıcam ama tek tek bütün tabloları query yapmak hiç mantıklı gelmiyor.

SELECt COUNT(userid) as users,COUNT(articleid) as articles FROM users,articles

Olarak yaptıgımda alamıyorum son yazdıgımın rakamını veriyor. Bunu tek SQL sorgusunda nasıl yaparım ?
Mesaj tarihi:
yok normalde mesela şöle;

SELECT users.username,articles.articlename FROM users,articles WHERE users.userid = articles.author

olarak alıyordum mesela yada outer join ile falan alıyorum ama bunda yemedi :D
Mesaj tarihi:
SELECT COUNT(DISTINCT users.userid) as total_user,COUNT(DISTINCT articles.articleid) as total_article FROM users,articles

Bu şekilde oluyor;)

http://forums.devarticles.com/general-sql-development-47/count-over-two-tables-1849.html
Mesaj tarihi:
ben bir wordpress veritabaninda deniyorum, mysql 5 asagidaki query calisiyor

SELECT COUNT(*) as users,
(SELECT COUNT(*) as articles FROM wp_links) as links,
(SELECT COUNT(*) as articles FROM wp_posts) as posts
FROM wp_users
Mesaj tarihi:
Bir tek Pluton'a yollayacaktim ama dayanamadim. Bakin SQL konusmak gibi bir dil. Sen soru soruyorsun, o sana cevap veriyor. Sacma bir soru sorarsan, sacma bir cevap alirsin. Soru sormayi bilmiyorsan (virgul'den sonra bosluk birakmak gibi) alacagin cevabin senin sorunun cevabi olma ihtimali pek de mumkun degil.
-how many siblings do you have?
-[izmir|ankara|35|hasan|ahmet|2]
sec begen al. Suraya acilan bilimum SQL sorularinda nolur suna bir dikkat edin.

Ikinci yakarisimsa "tek sorgu" muhabbetinize hastayim. Hani "tek sorgu" olsun da dunya turu atsin, yine razisiniz. Komik oluyor gercekten. Birbiriyle alakasiz iki tabloya cross-join yaptirip sonra coklamasini gayet normal karsilayaraktan distinct kullanmaniz... Ben kelime bulamadim aciklayacak. 1m kayit olan iki tablon var. Sonra bunlara cross-join yaptirdin, 1m*1m kayit yarattirmis oldun. Sonra bunlarin distinct olacak sekilde saydirdin. Aferim. Yaptigin seyin sacmaligini gectim, server'a yuk olmandan dolayi anlasmayi bozabilirler bile.

Birbiriyle alakasiz iki tablodan count aliyorsan illaki union all ile birlestirmen gerekiyor.

select 'table1' src, count(*) cnt from table1
union all
select 'table2' src, count(*) cnt from table2

Bunun disinda "group by" dediginiz sey herhangi bir eleman bazinda aggregation yaptiginda kullanacagin bir sey. Mesela users tablosunda kisilerin hangi ilde yasadiklarini tutuyorsundur. Sonra "group by"a sehir kolonunu koyarsin, boylece sana sehir kiriliminda count verir. Tablodaki tum kayit sayisini ogrenmeye calisan birisine "group by" kullanmalisin demek gercekten sacma.

Bana vakti zamaninda bu forumda verilen bir tavsiye vardi. "Illaki cevap vermek zorunda degilsin" demisti birisi. Ben bir adim oteye tasimak istiyorum; bilmiyorsaniz, sacmalamak zorunda degilsiniz.
Mesaj tarihi:
yorumun için teşekkür riglous, ama şu var ki sorgu benim eserim değil sölemek istediğini anladım bunun için çok teşekkür ederim.

Tek sorgu olayında ise öyle bir çabam yok ama şu şekilde oluyor mesela;

$q = mysql_query("SELECT COUNT(userid) as users FROM users");
$q2 = mysql_query("SELECT COUNT(aid) as articles FROM articles");
$q = mysql_fetch_assoc($q);
$q2 = mysql_fetch_assoc($q2);
echo $q.'-'.$q2;

Mesela birde 6 tablo olucak bu şekilde olmasından ziyade tek sorguda hepsini alabilirsem daha iyi olur diye düşünmüştüm ben ama
Mesaj tarihi:
Aynen o şekilde değiştirdim ama ilk tablonun sayısını alıp diğerini almıyor bu seferde


select 'users' src, count(*) as total_user from users
union all
select 'articles' src, count(*) as total_article from articles


Mesela burda sadece total_user doğru, total_article 'yi 0 alıyor
Mesaj tarihi:
Sarkastik degildi. Ben de karistirmisim, UNION kullan.

subquery kullanmak mantikli degil Mum. Zira senin yazdiginda, her bir kayit icin o subquery'i calistirir. 1000000 defa count alir yani.
Mesaj tarihi:
union'uda denedim ama ondada aynı ilk seferde denemiştim


select 'users' src, COUNT(*) as total_user from users
union
select 'articles' src, COUNT(*) as total_article from articles
Mesaj tarihi:
Kendimi de sasirttiniz bana ha.

create database tmp;
create table tmp.users(col1 integer);
create table tmp.articles(col1 integer);
insert into tmp.users(col1) values (1);
insert into tmp.users(col1) values (2);
insert into tmp.articles(col1) values (1);
--users: 2, articles: 1
select count(*) from tmp.users;
select count(*) from tmp.articles;
select 'users' src, count(*) cnt from tmp.users
union all
select 'articles' src, count(*) cnt from tmp.articles;
--EUREKA!
Mesaj tarihi:
riglous said:

subquery kullanmak mantikli degil Mum. Zira senin yazdiginda, her bir kayit icin o subquery'i calistirir. 1000000 defa count alir yani.


mysql subquery yapisinda teorik bir bilgim yok ama sql'in standart islem mantigini takip ediyorsa her kayit icin almamasi, degisken gibi calismasi lazim. once subquery'yi calistirip onun sonucunu ana query'ye iletmeli. yani bu durumda iki tane query'yi tek seferde calistirmasi lazim. ama teoride.
Mesaj tarihi:
Pluton said:

yorumun için teşekkür riglous, ama şu var ki sorgu benim eserim değil sölemek istediğini anladım bunun için çok teşekkür ederim.

Tek sorgu olayında ise öyle bir çabam yok ama şu şekilde oluyor mesela;

$q = mysql_query("SELECT COUNT(userid) as users FROM users");
$q2 = mysql_query("SELECT COUNT(aid) as articles FROM articles");
$q = mysql_fetch_assoc($q);
$q2 = mysql_fetch_assoc($q2);
echo $q.'-'.$q2;

Mesela birde 6 tablo olucak bu şekilde olmasından ziyade tek sorguda hepsini alabilirsem daha iyi olur diye düşünmüştüm ben ama


Hala duzgun bi db class'i kullanmiyorsan su dakika at kendini buldugun en yuksek yerden.
Mesaj tarihi:
Bu arada canlidaki bir sitenin 100 mb'lik haber DB'inde su subquery vs union olayini denedim ama her ikisi de 0.00 saniyede geri dondu.

Daha buyuk bir DB'de fark yaratir belki. Performans olayinda da 'IN' anahtar kelimesi ile ilgili sorunlar var sanirim sadece. Onun disinda birsey goremedim ben.
Mesaj tarihi:
subquery kullanmanın performansı düşürdüğünü çok yerde okumuştum fakat test edecek kadar büyük bir db elime geçmedi.

ayrıca sql sorgusu çalışıyor. tablolarda veri olduğundan emin misin ? :)
Mesaj tarihi:
di said:

Pluton said:

yorumun için teşekkür riglous, ama şu var ki sorgu benim eserim değil sölemek istediğini anladım bunun için çok teşekkür ederim.

Tek sorgu olayında ise öyle bir çabam yok ama şu şekilde oluyor mesela;

$q = mysql_query("SELECT COUNT(userid) as users FROM users");
$q2 = mysql_query("SELECT COUNT(aid) as articles FROM articles");
$q = mysql_fetch_assoc($q);
$q2 = mysql_fetch_assoc($q2);
echo $q.'-'.$q2;

Mesela birde 6 tablo olucak bu şekilde olmasından ziyade tek sorguda hepsini alabilirsem daha iyi olur diye düşünmüştüm ben ama


Hala duzgun bi db class'i kullanmiyorsan su dakika at kendini buldugun en yuksek yerden.


Ben misal dedim zaten
×
×
  • Yeni Oluştur...