Apakah ada cara agar saya bisa mendapatkan nomor baris sebenarnya dari kueri?
Saya ingin dapat memesan tabel bernama league_girl dengan bidang yang disebut skor; dan mengembalikan nama pengguna dan posisi baris sebenarnya dari nama pengguna tersebut.
Saya ingin memberi peringkat pada pengguna sehingga saya dapat mengetahui di mana pengguna tertentu berada, yaitu. Joe berada di posisi 100 dari 200, yaitu
User Score Row
Joe 100 1
Bob 50 2
Bill 10 3
Saya telah melihat beberapa solusi di sini tetapi saya telah mencoba sebagian besar dari mereka dan tidak ada yang benar-benar mengembalikan nomor baris.
Saya sudah mencoba ini:
SELECT position, username, score
FROM (SELECT @row := @row + 1 AS position, username, score
FROM league_girl GROUP BY username ORDER BY score DESC)
Seperti diturunkan
... tapi sepertinya tidak mengembalikan posisi baris.
Ada ide?
Jawaban:
Anda mungkin ingin mencoba yang berikut ini:
Bagian ini
JOIN (SELECT @curRow := 0)
memungkinkan inisialisasi variabel tanpa memerlukanSET
perintah terpisah .Kasus cobaan:
Uji kueri:
Hasil:
sumber
@curRow
dengan menggantiJOIN
pernyataan dengan koma, seperti ini:FROM league_girl l, (SELECT @curRow := 0) r
ORDER BY
?sumber
Inilah struktur template yang saya gunakan:
Dan inilah kode kerja saya:
sumber
Anda juga bisa menggunakan
untuk menginisialisasi variabel counter.
sumber
@curRow
mungkin masih memiliki nilai dari terakhir kali Anda menjalankan kueri ini di sesi saat ini.Dengan asumsi MySQL mendukungnya, Anda dapat dengan mudah melakukan ini dengan subkueri SQL standar:
Untuk hasil yang ditampilkan dalam jumlah besar, ini akan menjadi agak lambat dan Anda sebaiknya beralih ke self-join.
sumber
Jika Anda hanya ingin mengetahui posisi satu pengguna tertentu setelah memesan berdasarkan skor lapangan, Anda cukup memilih semua baris dari tabel Anda di mana skor lapangan lebih tinggi dari skor pengguna saat ini. Dan gunakan nomor baris yang dikembalikan + 1 untuk mengetahui posisi mana dari pengguna saat ini.
Dengan asumsi bahwa tabel Anda adalah
league_girl
dan bidang utama Anda adalahid
, Anda dapat menggunakan ini:sumber
Saya menemukan jawaban asli sangat membantu tetapi saya juga ingin mengambil serangkaian baris tertentu berdasarkan nomor baris yang saya masukkan. Karena itu, saya membungkus seluruh jawaban asli dalam subkueri sehingga saya bisa merujuk nomor baris yang saya sisipkan.
Memiliki subkueri dalam subkueri tidak terlalu efisien, jadi sebaiknya Anda menguji apakah Anda mendapatkan hasil yang lebih baik dengan meminta server SQL Anda menangani kueri ini, atau mengambil seluruh tabel dan meminta aplikasi / server web memanipulasi baris setelah fakta. .
Secara pribadi server SQL saya tidak terlalu sibuk, jadi lebih baik jika menangani subkueri bersarang.
sumber
Saya tahu OP meminta
mysql
jawaban tetapi karena saya menemukan jawaban lain tidak berfungsi untuk saya,order by
Jadi untuk menghemat waktu bagi orang lain seperti saya, cukup indeks baris setelah mengambilnya dari database
contoh di PHP:
contoh di PHP menggunakan offset dan limit untuk paging:
sumber