folder Tahribat.com Forumları
linefolder Programlama Genel
linefolder Bir MYSQL Sorum Ve Bir De Node.Js+MYSQL Sorum [Uzman]



Bir MYSQL Sorum Ve Bir De Node.Js+MYSQL Sorum [Uzman]

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Retro
    by_Tet
    by_Tet's avatar
    Kayıt Tarihi: 22/Mayıs/2012
    Erkek

    MYSQL Sorum (ilk soru) pek de uzmanlık gerektirmiyordur belki. Ama en iyi performans için bi formül arıyorum.

    En performanslı random kayıt nasıl çekilir? (kısacası bu sorunun)

    Açıklama: ORDER BY RAND() çok yavaşlatıyormuş ki gayet de öyle website test ile first byte datadan D alıyorum A veya B almam gerek.

    İnternetteki tüm çözümleri uyguladım nerdeyse. (mysql random rows, mysql random select ve mysql random şeklinde aradım googleda)

    Birisi özellikle kocaman bir döküman yazmış inner join ile randomu çarpıyor max(id) şeklinde alıyor ilk id son idden büyük veya eşitse seç gibi bir algoritma. Maalesef ki arada sırada random getiriyor ama 10tane sorgunun 9 unda ilk (veya son) id'yi getiriyor. Yani aynı yerde takılıyor.

    ---------------------

    Bir diğer sorum ise Node.js ile alakalı aslına bakarsak javascript de denebilir.

    Sorunun linki aslında şurada var bir başkası benim yerime sormuş ama cevap yok bunu da araştırdım ama bulamadım bir cevap: 

    http://stackoverflow.com/questions/26100184/how-to-save-the-result-of-mysql-query-in-variable-using-node-mysql

    Mysql ile connection.query ile çekiyoruz gelen sorguyu döngü içerisinde alıyoruz res.render ile gönderip jade'de değişken olarak okutmam gerek.

    Eğer fonksiyon içerinde okutursam okuyor. Ama iki tane üç tane sorgu çekersem napacam ben?

    Yani bana lazım olan phpde kullandığım gibi javascript ile şöyle birşey yazmam gerekli

    var sonuc;
    
    connection.query(query, function(err, rows, fields){
    
    if(err) throw err;
    
    sonuc = rows;
    
    });
    
    console.log(sonuc);

    Ama javascriptin özelliğinden dolayı (sanırım yani) o ilk belirtilen sonuç değişkeni fonksiyon içerisinde değiştirilirmiyor değer atanmıyor. Herşeyi denedim sanıyorum. Alternatif öneriniz var mı? (Örneğin mysql sorgusunda multiple query oluşturup throw err'den sonra res.rendere değeri atamak gibi buda hantal olur sanırım)

    ÖZET: MYSQL ile olan sorunun özeti kalın yer. Node.js i özetle anlatamıyorum kodu okusanız yeter sanıyorum. 

     


    iyibu! yeniden..
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Retro
    by_Tet
    by_Tet's avatar
    Kayıt Tarihi: 22/Mayıs/2012
    Erkek

    Eğer kendimi düzgün ifade edememişsem affola hocalar dilim döndüğünce tekrar anlatmaya çalışırım gerekirse fotolarla felan desteklemeye çalışırım. Benim için ölümcül bir sıkıntı sırf bu yüzden php'ye dönmek üzereyim ama istemiyorum node.jste sınırsız modül olayı ve c ile plugin yazma kısmı beni cezbediyor...


    iyibu! yeniden..
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    detCode
    detCode's avatar
    Kayıt Tarihi: 30/Kasım/2012
    Erkek

    hocam ilk olarak  connection.query( fonksiyonu asenkron çalışıyor yani şuandaki yazdığın kod ile console.log sorgudan daha önce çalışabilir. console.log u query fonksiyonun içine geçiceksin php gibi değil. veya bu connection.query nin senkron şeklinde çalışanı var ise onu kullanman lazım onu yapabilmen için 

    ikincisi asenkron çalışıyor dedik, sen senkron ilerlemen için ikinci sorgunu birinci sorgunun cevabı döndüğü yerden başlat ki sırayla devam etsin sen bütün verileri çekince işlerini bitirince yine en son query nin içinde jade ye yollarsın benim bildiğim budur

     

    edit hantal olur demişsinde ben hep böyle kullandım sorguları değilse asenkron olayından dolayı düzgün çalışmaz. bide jade kullanma benden tavsiye cpu performansı çok kötü

     

    detCode tarafından 27/Haz/15 00:30 tarihinde düzenlenmiştir

    Who is detCode?
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Retro
    by_Tet
    by_Tet's avatar
    Kayıt Tarihi: 22/Mayıs/2012
    Erkek
    detCode bunu yazdı

    hocam ilk olarak  connection.query( fonksiyonu asenkron çalışıyor yani şuandaki yazdığın kod ile console.log sorgudan daha önce çalışabilir. console.log u query fonksiyonun içine geçiceksin php gibi değil. veya bu connection.query nin senkron şeklinde çalışanı var ise onu kullanman lazım onu yapabilmen için 

    ikincisi asenkron çalışıyor dedik, sen senkron ilerlemen için ikinci sorgunu birinci sorgunun cevabı döndüğü yerden başlat ki sırayla devam etsin sen bütün verileri çekince işlerini bitirince yine en son query nin içinde jade ye yollarsın 

    Yani fonksiyon içinde fonksiyon halinde mi çalıştırıyım hocam? Nested mi ne deniyor galiba ingilizcem pek iyi değil de şöyle:

    connection.query(blabla){
        if(err) throw err;
        var sonuc1 = rows;       
    
              connection.query(blabla){
               if(err) throw err;
               var sonuc2 = rows;
               res.render({
                     sonuc1 = sonuc1,
                     sonuc2 = sonuc2
              });
    });

    Eğer bunu kastediyorsan sanki atıyorum 5 kayıt olursa bir daha bakmam imkansızlaşacak yani uzar gider içi sanki? Zaten performans için maksimum 4 farklı query çalıştırırım da o ayrı...

    @detCode

     Edit: Jade kullanma demişsin hocam syntax'ı çok hoşuma gidiyor başka ne önerin var?

    by_Tet tarafından 27/Haz/15 00:37 tarihinde düzenlenmiştir

    iyibu! yeniden..
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    detCode
    detCode's avatar
    Kayıt Tarihi: 30/Kasım/2012
    Erkek
    by_Tet bunu yazdı
    detCode bunu yazdı

    hocam ilk olarak  connection.query( fonksiyonu asenkron çalışıyor yani şuandaki yazdığın kod ile console.log sorgudan daha önce çalışabilir. console.log u query fonksiyonun içine geçiceksin php gibi değil. veya bu connection.query nin senkron şeklinde çalışanı var ise onu kullanman lazım onu yapabilmen için 

    ikincisi asenkron çalışıyor dedik, sen senkron ilerlemen için ikinci sorgunu birinci sorgunun cevabı döndüğü yerden başlat ki sırayla devam etsin sen bütün verileri çekince işlerini bitirince yine en son query nin içinde jade ye yollarsın 

    Yani fonksiyon içinde fonksiyon halinde mi çalıştırıyım hocam? Nested mi ne deniyor galiba ingilizcem pek iyi değil de şöyle:

    connection.query(blabla){
        if(err) throw err;
        var sonuc1 = rows;       
    
              connection.query(blabla){
               if(err) throw err;
               var sonuc2 = rows;
               res.render({
                     sonuc1 = sonuc1,
                     sonuc2 = sonuc2
              });
    });

    Eğer bunu kastediyorsan sanki atıyorum 5 kayıt olursa bir daha bakmam imkansızlaşacak yani uzar gider içi sanki? Zaten performans için maksimum 4 farklı query çalıştırırım da o ayrı...

    @detCode

     

    evet hocam dediğim bu içi uzayıp gidiyor zaten başka bi yolu varmı bilmiyorum ben hep böyle kullanıyorum. senkron çalıştırmak için başka bi yol olabilir ama araştırmak lazım


    Who is detCode?
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    pSkpt
    pSkpt's avatar
    Kayıt Tarihi: 10/Aralık/2010
    Erkek

    Node.js falan bilmem ama iç içe fonksiyonu şu şekilde yapabilirsin gibi geldi bana.

    function runQuery(query_arr,sira){
    	connection.query(query_arr[sira]){
    	    if(err) throw err;
    	    var sonuc1 = rows;
    	    sonuclar.append(rows);
    	    runQuery(query_arr, sira+1)
    	});
    }
    
    sonuclar = []
    query_arr = ["aaa","bbbb", "ccc", "ddd", "eee"]
    
    runQuery(query_arr, 0);
    
    console.log(sonuclar);java

     


    İmza...
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Retro
    by_Tet
    by_Tet's avatar
    Kayıt Tarihi: 22/Mayıs/2012
    Erkek
    detCode bunu yazdı
    by_Tet bunu yazdı
    detCode bunu yazdı

     

    ...

     

    ...

    evet hocam dediğim bu içi uzayıp gidiyor zaten başka bi yolu varmı bilmiyorum ben hep böyle kullanıyorum. senkron çalıştırmak için başka bi yol olabilir ama araştırmak lazım

    Hocam yalnız çok sıkıntı böyle mutlaka bir çözümü olmalı bence global değerlere baktım ama o da olmuyor. Enazından daha derli toplu birşekilde yazmamız gerek

    Mysql ile bir çözümü olabilir diye düşünüyorum açıkcası mysql im biraz kıt. Tek sorguda 3 farklı row getirebilirsek o da yeter :D Gerçi multiple rows olayı var ona bi bakıyım.

    Bir de Jade ile ilgili tavsiyen nedir hocam hangine engine?


    iyibu! yeniden..
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    detCode
    detCode's avatar
    Kayıt Tarihi: 30/Kasım/2012
    Erkek
    pSkpt bunu yazdı

    Node.js falan bilmem ama iç içe fonksiyonu şu şekilde yapabilirsin gibi geldi bana.

    function runQuery(query_arr,sira){
    	connection.query(query_arr[sira]){
    	    if(err) throw err;
    	    var sonuc1 = rows;
    	    sonuclar.append(rows);
    	    runQuery(query_arr, sira+1)
    	});
    }
    
    sonuclar = []
    query_arr = ["aaa","bbbb", "ccc", "ddd", "eee"]
    
    runQuery(query_arr, 0);
    
    console.log(sonuclar);java

     

    hocam kesin konuşmayımda burdada runQuery çalışmaya başladığında bitmesini beklemeden console.log'a geçebilir denemedim mysql filan yok konuyu açan arkadaş denese daha iyi olabilir.

    @by_Tet hocam http://stackoverflow.com/questions/6597493/synchronous-database-queries-with-node-js şuraya bi bakarsın

    detCode tarafından 27/Haz/15 00:46 tarihinde düzenlenmiştir

    Who is detCode?
  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Retro
    by_Tet
    by_Tet's avatar
    Kayıt Tarihi: 22/Mayıs/2012
    Erkek
    detCode bunu yazdı
    pSkpt bunu yazdı

    Node.js falan bilmem ama iç içe fonksiyonu şu şekilde yapabilirsin gibi geldi bana.

    function runQuery(query_arr,sira){
    	connection.query(query_arr[sira]){
    	    if(err) throw err;
    	    var sonuc1 = rows;
    	    sonuclar.append(rows);
    	    runQuery(query_arr, sira+1)
    	});
    }
    
    sonuclar = []
    query_arr = ["aaa","bbbb", "ccc", "ddd", "eee"]
    
    runQuery(query_arr, 0);
    
    console.log(sonuclar);java

     

    hocam kesin konuşmayımda burdada runQuery çalışmaya başladığında bitmesini beklemeden console.log'a geçebilir denemedim mysql filan yok konuyu açan arkadaş denese daha iyi olabilir.

    Deniyorum hocam ama muhtemelen dediğin gibi sonuclar.append de tıpkı sonuclar = rows gibi çalışmayacak. Denedikten sonra yazacaktım @pSkpt


    iyibu! yeniden..
  10. KısayolKısayol reportŞikayet pmÖzel Mesaj
    pSkpt
    pSkpt's avatar
    Kayıt Tarihi: 10/Aralık/2010
    Erkek

    O zaman böyle olacak.

    function runQuery(query_arr,sira){
    	connection.query(query_arr[sira]){
    	    if(err) throw err;
    	    var sonuc1 = rows;
    	    sonuclar.append(rows);
    	    if (query_arr.length <= sira+1){
    	    	console.log(sonuclar);
    	    }else{
    	    	runQuery(query_arr, sira+1);
    	    }
    	    
    	});
    }
    
    sonuclar = []
    query_arr = ["aaa","bbbb", "ccc", "ddd", "eee"]
    
    runQuery(query_arr, 0);
    



     

    pSkpt tarafından 27/Haz/15 00:48 tarihinde düzenlenmiştir

    İmza...
  11. KısayolKısayol reportŞikayet pmÖzel Mesaj
    detCode
    detCode's avatar
    Kayıt Tarihi: 30/Kasım/2012
    Erkek
    pSkpt bunu yazdı

    O zaman böyle olacak.

    function runQuery(query_arr,sira){
    	connection.query(query_arr[sira]){
    	    if(err) throw err;
    	    var sonuc1 = rows;
    	    sonuclar.append(rows);
    	    if (query_arr.length <= sira+1){
    	    	console.log(sonuclar);
    	    }else{
    	    	runQuery(query_arr, sira+1);
    	    }
    	    
    	});
    }
    
    sonuclar = []
    query_arr = ["aaa","bbbb", "ccc", "ddd", "eee"]
    
    runQuery(query_arr, 0); 

    aynen hocam :D biraz önceki gibi yapmak için de bi tane callback değişkeni filan oluşturmak gerekiyor şurdaki ilk cevapda elemanın anlattığı gibi http://stackoverflow.com/questions/19739755/nodejs-callbacks-simple-example veya https://github.com/caolan/async şurdaki kütüphaneyle filanda yapabilirsin


    Who is detCode?