Mysql'de sorgu içinde sorgu işlemi
Ç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;
Uye | userKey |
---|---|
Üye 1 | mT_0FrncAGLQM-V2QaDnc8m_SZ3OX92bHvRS |
Üye 2 | 5d3SOYwxa9-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.
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (4)
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ı...
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.