View Full Version : [Q] Sort Database?
Trong SQL có cách nào để sort database theo các field ko?
Bạn nói sort dữ liệu SQL là sao? Cái này bạn phải làm trong lúc truy vấn dữ liệu chứ. Có nghĩa là trong câu lệnh SQL của bạn, VD như
SELECT * FROM Employees ORDER BY employee_id DESC
Ko, ý tui nói là short các record của database kìa.
Tui ko hỏi cách sort dữ liệu khi kết xuất, mà hỏi cách sort thứ tự các record trong một table (ko có kết xuất). Mà hình như SQL ko có thì phải.
White Rose
16-03-2004, 20:01
Một điểm cơ bản đối với CSDL mà bạn phải nhớ là bạn không cần (và cũng không thể) biết dữ liệu được lưu trữ thế nào. Bạn chỉ cần "ra lệnh" nó lấy dữ liệu ra như thế nào, DBMS sẽ lấy ra như thế đó.
Các record trong một table nói chung được lưu trữ không theo bất kì thứ tự nào hết. Địa chỉ thực sự của nó trong thiết bị lưu trữ được DBMS quản lý bên trong và những giá trị này vô nghĩa đối với những người phát triển ứng dụng ;-)
Đã đành là vậy. Nhưng nếu tôi muốn lưu một bảng dữ liệu có 1 quan hệ thứ tự giữa các record là X, và thứ tự đó có thể được thể hiện thông qua ID (primary key). Nếu tôi muốn thêm vào table 1 record và muốn đảm bảo rằng record đó sẽ được lưu theo đúng quan hệ thứ tự X thì phải làm thế nào?
Vậy thì bạn update ID lại :) ID cũng chỉ là 1 field trong record mà thôi.
Nhưng ID là primary và có thuộv tính auto-increment thì sao?
Dễ thôi, giả sử như bạn đã có 10 records, và bạn muốn chèn 1 record A vào vị trí số 6. Bạn copy các giá trị của records số 6 vào biến, rồi UPDATE các giá trị của A vào cái record có ID số 6 ;) sau đó thì giá trị của số 6 bạn muốn cho nó đi đâu thì đi, sang số 7 chẳng hạn... và cứ thế...
Nói đi nói lại, vấn đề mà bạn cần được giải quyết đều do phần lập trình chứ không do Database.
Tốt nhất, nói rõ trường hợp cụ thể của bạn, sẽ có cách giải quyết thôi mà.
nếu ID có thuộc tính là Auto-increment bạn dùng câu lênh:
SET IDENTITY_INSERT tblname ON ;
--cau lenh insert cua ban ;
SET IDENTITY_INSERT tblname OFF
Một điểm cơ bản đối với CSDL mà bạn phải nhớ là bạn không cần (và cũng không thể) biết dữ liệu được lưu trữ thế nào. Bạn chỉ cần "ra lệnh" nó lấy dữ liệu ra như thế nào, DBMS sẽ lấy ra như thế đó.
Các record trong một table nói chung được lưu trữ không theo bất kì thứ tự nào hết. Địa chỉ thực sự của nó trong thiết bị lưu trữ được DBMS quản lý bên trong và những giá trị này vô nghĩa đối với những người phát triển ứng dụng ;-)
Đúng như White Rose nói, việc lưu theo thứ tự cũng có ý nghĩa nhất định nhưng đó là công việc của RDBMS làm, công việc của bạn làm là thiết kế database sao cho đáp ứng yêu cầu đề ra, và sử dụng các câu lệnh SQL để lấy dữ liệu ra theo đúng yêu cầu của bạn. Việc bắt buộc các record lưu theo đúng thứ tự của quan hệ X thì chỉ làm khó khăn cho bạn trong lúc thêm một hay nhiều record mới vào trong bảng.
Tôi nghĩ có lẽ Jish@n muốn có thuộc tính Indexed như trong Access thì phải, có nó sử dụng tìm kiếm cũng đỡ đỡ hơn chứ sao bpmtri nói zậy!
Tôi nghĩ có lẽ Jish@n muốn có thuộc tính Indexed như trong Access thì phải, có nó sử dụng tìm kiếm cũng đỡ đỡ hơn chứ sao bpmtri nói zậy!
À, cái đó là CREATE INDEX :).
Theo mình hiểu thì ý của Jish@n là muốn tự mình kiểm soát được thứ tự lưu các record của RDBMS nên mới nói như vậy!
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.