v2.5.2
Giriş yap

Mysql'de sorgu içinde sorgu işlemi

azizdmrr
331 defa görüntülendi

Çoğumuz PHP veya javascript gibi dillerde bir MySQL sorgusunu for içine alıp döndürdükçe döndürüyoruz.

Peki verimliliğin tartışıldığı şu esnada çözüm olarak nasıl bir MySQL sorgusu yazabilirdiniz;


Tablomda kullanıcılar için hazırladığım örnek bir "userKey" yapısı aşağıdaki tabloda var;

UyeuserKey
Üye 1mT_0FrncAGLQM-V2QaDnc8m_SZ3OX92bHvRS
Üye 25d3SOYwxa9-YYCS5FRZaQOGm6xh62T8phFyML

Buradan da anlaşılıyor ki tüm userKey'ler random halde gelmekte...

Küçük bir soru da burada yapıştırayım: PHP'de Random diye bir şey var mıdır??? (10:27)
Konu bazımız için önemli olabilir


Gelelim asıl soruya:

SELECT
    id, userKey, 
FROM
    users
WHERE
    userKey = '....herhangi bir sıradaki randomKey....'
ORDER BY
    id
LIMIT
    (buraya bir sorgu gelecek ve aynı tablodan dönen ID değeri x olsun),
    x+50

Ben bu şekilde random key üzerinden ilerlerdiğim yapıda LIMIT kısmının başlangıç ID'sini MySQL içinde bana döndürecek, ben de o ID'ye sahip değeri x diye atanan yere atayıp belli bir alandaki datayı çekebileceğim gibi düşünün...

Mantığı belki basittir fakat benim kurgulayamadığım bir gerçek. 😅
Yardımcı olursanız sevinirim.

Cevap yaz
Cevaplar (4)
azizdmrr
644 gün önce

Key değeri yerine id değerini alamıyorum. Sorunu aslında kullanıcılar tablosunda vermeye çalıştım ama orijinalinde bu tablo mesajlar için listeleniyor. Kullanıcıya key değerini verip sonra geri almam gereken bir konu var. Mesajların listelemesi de bildiğiniz üzere ters yapıda.

Jquery ile div içerisinde bulununan mesajlardan en tepedeki dive atadığım son key değerini alıp üstte mesaj var mı yok mu onu sorgulatmak için hazırladığım bir SQL sorgusuydu. Dün cevapladım fakat LIMIT değerinin myqsl değişkeni kabul etmemesinden ötürü yine çözümsüz bir soru olarak kaldı...

kartal
644 gün önce

SET ettiğin keyi nereden alıyorsun onun yerine id sini alsan daha kısa yol olabilir.

kartal
644 gün önce

Daha sade anlatabilirmisin tablo üstünde..

azizdmrr
645 gün önce
SET @usrKey = 'mT_0FrncAGLQM-V2QaDnc8m_SZ3OX92bHvRS';

SELECT
*
FROM
    users,
    (SELECT
     	usr.id AS userID,
        usr.userKey
    FROM
        users AS usr
    WHERE
        usr.userKey = @usrKey
    ) AS userID_
WHERE
	id > userID_.userID
ORDER BY
	id
LIMIT
	15

gibi bir çözüm buldum. Deneyen bir arkadaş olursa belki denk gelir çözer. Farklı çözümler aklınıza gelirse yazabilirsiniz. Kolay gelsin.