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


Pluton

Öne çıkan mesajlar

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 ?
Link to comment
Sosyal ağlarda paylaş

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.
Link to comment
Sosyal ağlarda paylaş

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
Link to comment
Sosyal ağlarda paylaş

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
Link to comment
Sosyal ağlarda paylaş

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!
Link to comment
Sosyal ağlarda paylaş

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.
Link to comment
Sosyal ağlarda paylaş

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.
Link to comment
Sosyal ağlarda paylaş

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.
Link to comment
Sosyal ağlarda paylaş

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
Link to comment
Sosyal ağlarda paylaş

×
×
  • Yeni Oluştur...