Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

permintaan mysql untuk daftar tertaut

Kueri bekerja dengan mengulangi t_list tabel (baris terakhir). Untuk setiap baris dalam tabel ini, sub-kueri di SELECT klausa mengkueri ulang tabel, mencari anak baris saat ini (WHERE parent = _parent -- tapi _parent adalah alias untuk @r ). Pada setiap iterasi, id child anak ditugaskan ke @r variabel.

Untuk menambahkan batasan, variasi ini harus berhasil:

SELECT * FROM (
    SELECT
        @r AS _parent,
        @r := (
            SELECT id
            FROM t_list
            WHERE
                ( @c = 0 AND _parent IS NULL AND parent IS NULL ) -- special case if the first item is the root
                OR (parent = _parent)
        ) AS id,
        @c := @c + 1 AS rank
    FROM (
        SELECT @c := 0, @r := parent FROM t_list WHERE id = @start
    ) AS ini,
    (
        SELECT id FROM t_list LIMIT @limit
    ) AS lim
) AS tmp WHERE id IS NOT NULL;

Ganti @start dan @limit dengan id item pertama, dan jumlah maksimum item untuk diambil, masing-masing. Silakan uji di sini .

Memodelkan struktur data seperti itu dengan RDBMS mungkin merupakan ide yang buruk sama sekali. Mengapa tidak menggunakan kolom "indeks" saja? Mendapatkan daftar kemudian menjadi instan:

SELECT * FROM list ORDER BY index_column ASC;

Mungkin daftar Anda dimaksudkan untuk sering berubah, tetapi kueri seperti ini seharusnya cukup cepat kecuali jika daftarnya bertambah besar:

-- insert an element at position X 
UPDATE list SET index_column = index_column +1 WHERE index_column > X ORDER BY index_column DESC;
INSERT INTO list VALUE (some_value, X);

-- delete an element at position X 
DELETE FROM list WHERE index_column = X;
UPDATE list SET index_column = index_column -1 WHERE index_column > X ORDER BY index_column ASC;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara otomatis untuk mengonversi file XML ke database SQL?

  2. Hapus beberapa baris dengan PDO dan kotak centang menggunakan pernyataan yang disiapkan?

  3. Bagaimana cara menyimpan array ke dalam variabel sesi di php

  4. Bagaimana cara memperbarui banyak duplikat dengan nilai berbeda pada tabel yang sama?

  5. ubah nama tabel menjadi huruf besar