Mesela elimde 500 tane kayıt var. Benim bilgisini almak istediğim kullanıcı 20.sırada olsun. Bem sorguya kullanıcı id sini vereceğim bana kaçıncı sırada olduğu söyleyecek.Bu sorguyu nasıl yazarım?

soruldu: 18 Tem '12, 07:15

emax_64's gravatar image

emax_64
64590102101
cevap kabul oranı: 20%

değiştirildi: 18 Tem '12, 09:09

CemIkta's gravatar image

CemIkta ♦
19.9k29125190


bu sonucu mysql de şöyle bir fonksiyon yaparak alabilirsin.

CREATE FUNCTION getOyuncuSira(oyuncuId INT) RETURNS INT
BEGIN
    DECLARE x INT;
    DECLARE sira INT;
    SET sira = 0;
    sloop:LOOP
        SELECT id into x FROM oyuncular;
        IF x <> oyuncuId THEN
            SET sira = sira+1;
            ITERATE sloop;
        ELSE
            LEAVE sloop;
        END IF;  
    END LOOP;
    RETURN sira;
END $$
permanent link

cevaplandı: 18 Tem '12, 19:17

ersintarhan's gravatar image

ersintarhan
10813
cevap kabul oranı: 33%

Bunun icin Oracle da RowId diye kullanicinin olusturmadigi, ancak her Table in sahip oldugu bir stün var. Malesef buna benzer bir yapi MySQL de yok. Eger kayitlari cekerken kacinci sirada oldugunu görmek istersen, bu su sekilde yapabilirsin :

SELECT @rowid:=@rowid+1 as rowid, p.product_id, p.title
FROM products p, (SELECT @rowid:=0) as init

Bu, dönen kayitlara , rowid dieye bir stün ekler ve orda sira numarasi yazar. Ancak sen bu sorguyu

SELECT @rowid:=@rowid+1 as rowid, p.product_id, p.title
FROM products p, (SELECT @rowid:=0) as init
WHERE p.product_id = 10

seklinde yazarsan, ilk sorguda diyelimki 5. sirada olan id=10 numarali Product simdi birinci sirada olacak. Cünkü bir tek kayit dönecek. Bu senin istedigin degil anladigim kadariyal. Ancak bu yöntemi kullanip, biraz gelistirip, uzun yoldan da olsa, istedigin sonuca ulasabilirsin. Ancak bunlarin hic biri de efektif olmaz.

Eger tam olarak ne yapmak istedigini anlatirsan, belki baska bir yöntem bulabiliriz.

permanent link

cevaplandı: 18 Tem '12, 09:38

mceliksoy's gravatar image

mceliksoy ♦
6.5k84988
cevap kabul oranı: 25%

değiştirildi: 18 Tem '12, 09:39

Aslında ben tam olarak şunu yapmak istedim, Benim oyunumu oynayan kullanıcılar eğer oyunu başarılı bir şekilde bitirdi iseler sıralamarını gösterebileceğim bir kısım olacak. Ben oyunu android de yapıyorum. Şimdi android de mysql veritabanında bilgileri alarak göstermeyi yapamadım. Yani Kullanıcının sadece bir kolonunu değilde kullanıcıya ait olan atıyorum 3 kolon bilgisini veritabanından alıp android de kullanma kısmında tıkandım. Bunun yerine şunu düşündüm, kullanıcının tüm oyuna katılanlar içinde kaçıncı olduğu bilgisini kendine göstermeyi.Bunu mysql veritabanında çekip android de gösterebiliyorum. Çünkü 1 kolon bilgisi dönüyor. İşte asıl yapmak istediğim bu. Puan tablosu şeklinde yapmak istedim ancak zor geldi böyle basit bir yöntem düşündüm.Eğer kullanıcıya ait 3 kolondaki bilgiyi alabilirsen süper olacak diyebilirim:)

permanent link

cevaplandı: 18 Tem '12, 10:19

emax_64's gravatar image

emax_64
64590102101
cevap kabul oranı: 20%

değiştirildi: 18 Tem '12, 10:20

Baglandiginiz MySQL uzak bir bilgisayardami, yani verileri internetten mi cekiyorsunuz. Yapmak isteidiginiz aslinda basit. Aslinda tam da benim verdigim örnegin yaptigi sey. Yani bir Top10 olusturmak. Ancak sadece bir kolonun bilgilerini alabiliyor olmaniz garip. Ben böyle bir sinirlama oldugunu düsünmüyorum. Bence bur da bir problem var. Eger bir sorgu JDBC ile cekiyorsaniz, size istediginiz kolon larin icinde oldugu bir ResultSet döner, yok WebService ile yapiyorsaniz, geriye istediginiz bilgileri iceren bir Object döndürebilisiniz.

(18 Tem '12, 10:24) mceliksoy ♦ mceliksoy's gravatar image

Hayır hayır sadece 1 kolon alabilmek benim programlama bilgimden kaynaklanıyor. Yani sadece programlama bilgisi olarak onu yapabiliyorum. Aslında şunu düşündüm, bir tane web servisimde metod yazıp kullanıcının bilgilerini android tarafında almak istediğim ancak işte geriye sanırım ArrayList falan döndürmem gerekiyor o kısmı yapamadım.

(18 Tem '12, 10:31) emax_64 emax_64's gravatar image

Bu arada server ı kendim yazdım. Top 10 tarzı bir şey yapabilsem süper olacak da olmadı.

(18 Tem '12, 10:32) emax_64 emax_64's gravatar image

Web service lerini görmek lazim yardim edebilmek icin, yada isey yaparken, söyle bir hata veriyor diyerek, kod örnekleriyle sormakta fayda var. ancak sana tevsiyem, öncelikle JDBC Tutorial lara biraz bakman ve WebService ler konusunda kendini biraz gelistirmen.

JDBC : http://docs.oracle.com/javase/tutorial/jdbc/index.html

JAX-RS : http://www.vogella.com/articles/REST/article.html

(18 Tem '12, 10:41) mceliksoy ♦ mceliksoy's gravatar image

mesela örnek olarak kullanıcının online olup olmadığını şu metod ile sağlıyorum.Çok da sağlıklı çalışıyor, public static void DurumGuncelle(String ad) { String guncelle = "update clientbilgileri set Durum=?,Tarih=? where KullaniciAdi=?"; con = MysqlBaglanti.Baglan(); try { prepared = con.prepareStatement(guncelle); prepared.setInt(1, 1); prepared.setString(3,ad); prepared.setString(2,Zaman()); prepared.executeUpdate(); } catch (Exception e) { System.out.println("Hata: "+e.getMessage()); } }

(18 Tem '12, 10:46) emax_64 emax_64's gravatar image

Benim tıkandığım nokta şurada, gelen veriler kullanıcı adına göre sadece 1 veri değilde 3 veri olacak.Mesela Adı,Puanı,Bir de zmaan bilgisi. Bunu sizce nasıl bir metod ile sağlayabilirim?

(18 Tem '12, 10:46) emax_64 emax_64's gravatar image

Gönderdiğiniz sitede mevcut olan kod şu şekilde, while (rs.next()) { int x = rs.getInt("a"); String s = rs.getString("b"); float f = rs.getFloat("c"); } bu şekilde bende yaparak verileri alıyorum.Ancak bunları return yapmakta zorluk çekiyorum.

(18 Tem '12, 10:48) emax_64 emax_64's gravatar image
7 yorumdan 5 tanesi gösteriliyor hepsini göster
Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×144
×77

Soruldu: 18 Tem '12, 07:15

Görüntüleme: 1,841 kez

Son güncelleme: 18 Tem '12, 19:17

powered by BitNami OSQA