PDA

View Full Version : [Q] Sort Database?



jiSh@n
14-03-2004, 07:36
Trong SQL có cách nào để sort database theo các field ko?

novavn
14-03-2004, 16:19
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

jiSh@n
15-03-2004, 09:02
Ko, ý tui nói là short các record của database kìa.

jiSh@n
16-03-2004, 19:23
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 ;-)

jiSh@n
18-03-2004, 23:54
Đã đà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?

vikhoa
19-03-2004, 06:58
Vậy thì bạn update ID lại :) ID cũng chỉ là 1 field trong record mà thôi.

jiSh@n
19-03-2004, 07:02
Nhưng ID là primary và có thuộv tính auto-increment thì sao?

vikhoa
19-03-2004, 07:27
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à.

H2T
19-03-2004, 15:25
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

bpmtri
19-03-2004, 16:00
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.

Bacmaon
30-03-2004, 10:51
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!

bpmtri
30-03-2004, 11:03
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!