Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Mendapatkan Kembali Kedudukan Baris dalam MySQL ORDER BY Klausa?

Bagaimana untuk Mendapatkan Kembali Kedudukan Baris dalam MySQL ORDER BY Klausa?

Linda Hamilton
Lepaskan: 2025-01-18 02:15:09
asal
390 orang telah melayarinya

How to Efficiently Retrieve a Row's Position in a MySQL ORDER BY Clause?

Dapatkan kedudukan baris dengan cekap dalam MySQL ORDER BY klausa

Isih data dalam jadual pangkalan data menyediakan paparan berstruktur rekod. Walau bagaimanapun, kadangkala adalah perlu untuk menentukan kedudukan baris tertentu dalam hasil yang diisih. Artikel ini meneroka cara untuk mencapai ini menggunakan klausa ORDER BY dalam MySQL dan menyediakan penyelesaian yang dioptimumkan untuk mendapatkan semula satu baris dan lokasinya.

Pernyataan Masalah:

Pertimbangkan jadual MySQL bernama "tbl" yang mengandungi dua lajur: "id" dan "nama". Apabila diisih mengikut lajur "nama" dalam tertib menaik, data jadual kelihatan seperti ini:

<code>+-----------+--------------------+
| id         | name               |
+-----------+--------------------+
| 5          | Alpha              |
| 7          | Beta               |
| 3          | Delta              |
| ...        | ...                |
| 1          | Zed                |
+-----------+--------------------+</code>
Salin selepas log masuk

Sasaran:

Matlamatnya ialah untuk mendapatkan semula baris "Beta" daripada jadual yang diisih dan kedudukannya dalam set hasil. Output yang dikehendaki hendaklah:

<code>+-----------+-------------+--------------+
| id         | position    | name        |
+-----------+-------------+--------------+
| 7          |             2 | Beta        |
+-----------+-------------+--------------+</code>
Salin selepas log masuk

Pilihan 1: Pertanyaan yang dioptimumkan

Untuk mendapatkan semula kedudukan baris tertentu dalam klausa ORDER BY, kita boleh menggunakan subquery untuk menetapkan nombor baris secara berperingkat berdasarkan susunan isihan. Pertanyaan berikut berkesan mencapai ini:

<code class="language-sql">SELECT x.id, 
       x.position,
       x.name
  FROM (SELECT t.id,
               t.name,
               @rownum := @rownum + 1 AS position
          FROM tbl t
          JOIN (SELECT @rownum := 0) r
      ORDER BY t.name) x
 WHERE x.name = 'Beta'</code>
Salin selepas log masuk

Dalam pertanyaan ini, kami mencipta subkueri (disertakan dalam kurungan) yang menggunakan pembolehubah yang ditentukan pengguna (@rownum) untuk menetapkan nombor baris yang bertambah. Lakukan JOIN dengan jadual maya yang dimulakan dengan @rownum := 0, pastikan nombor bermula pada 1. Klausa WHERE menapis hasil untuk mendapatkan hanya baris dengan nama "Beta".

Pilihan 2: Pertanyaan alternatif

Pertanyaan alternatif berikut boleh dirumuskan untuk mendapatkan lokasi:

<code class="language-sql">SELECT t.id,
       (SELECT COUNT(*)
          FROM tbl x
         WHERE x.name < t.name) + 1 AS position,
       t.name
  FROM tbl t
 WHERE t.name = 'Beta';</code>
Salin selepas log masuk

Tidak seperti senario satu, pertanyaan ini mengira kedudukan dengan mengira bilangan baris dengan nama yang sama atau kurang daripada nama sasaran. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa pendekatan ini boleh mengakibatkan pertindihan baris dengan nama yang sama, memberikan mereka nilai kedudukan yang sama.

Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Kembali Kedudukan Baris dalam MySQL ORDER BY Klausa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan