banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận hệ điều hành Windows Sắp xếp theo số lượng các phần tử cùng giá trị trong mysql ?  XML
  [Question]   Sắp xếp theo số lượng các phần tử cùng giá trị trong mysql ? 08/08/2008 04:33:09 (+0700) | #1 | 145629
[Avatar]
secmask
Elite Member

[Minus]    0    [Plus]
Joined: 29/10/2004 13:52:24
Messages: 553
Location: graveyard
Offline
[Profile] [PM] [WWW]
Chào các bác, em đang bế tắc để tìm ra câu truy vấn thích hợp trong mysql, là thế này:
có bảng
Code:
from --> to
3           1
3           2
2           3
1           2
1           3
1           4

cần sắp xếp bảng này theo tiêu chí là trong trường from, nhóm giá trị nào có nhiều phần tử cùng giá trị thì được đưa lên trước.
như vậy kết quả phải là
Code:
from --> to
1          2
1          3
1          4
3          1
3          2
2          3

nhìn đơn giản mà làm mãi chưa được smilie, mong các bác chỉ giúp!
[Up] [Print Copy]
  [Question]   Re: Sắp xếp theo số lượng các phần tử cùng giá trị trong mysql ? 08/08/2008 05:15:53 (+0700) | #2 | 145640
[Avatar]
K4i
Moderator

Joined: 18/04/2006 09:32:13
Messages: 635
Location: Underground
Offline
[Profile] [PM]
@secmask: tôi nghĩ là nên lấy toàn bộ ra rồi code xử lý toàn bộ bằng một cái Server Script nào đó hơn là ngồi nghĩ SQL query
Sống là để không chết chứ không phải để trở thành anh hùng
[Up] [Print Copy]
  [Question]   Re: Sắp xếp theo số lượng các phần tử cùng giá trị trong mysql ? 08/08/2008 05:34:08 (+0700) | #3 | 145641
[Avatar]
secmask
Elite Member

[Minus]    0    [Plus]
Joined: 29/10/2004 13:52:24
Messages: 553
Location: graveyard
Offline
[Profile] [PM] [WWW]

K4i wrote:
@secmask: tôi nghĩ là nên lấy toàn bộ ra rồi code xử lý toàn bộ bằng một cái Server Script nào đó hơn là ngồi nghĩ SQL query 

chào K4i, cảm ơn bác đã quan tâm
đồng ý là lấy ra rồi sắp xếp thì ổn thôi, nhưng tớ nghĩ trường hợp này và nhiều trường hợp khác nữa nên để xử lý trong DB thì sẽ xử lý nhanh hơn, lại bớt được cái đoạn sắp xếp ngoài kia.
[Up] [Print Copy]
  [Question]   Re: Sắp xếp theo số lượng các phần tử cùng giá trị trong mysql ? 08/08/2008 06:44:19 (+0700) | #4 | 145656
[Avatar]
xnohat
Moderator

Joined: 30/01/2005 13:59:19
Messages: 1210
Location: /dev/null
Offline
[Profile] [PM] [Email] [WWW] [Yahoo!] [MSN]
Bạn không thể sắp xếp ngay trong dữ liệu được lưu trữ trong MySQL được, vì dữ liệu được thêm vào thì sẽ được chèn ngay lập tức sau mẩu dữ liệu trước ( cứ tưởng tượng bạn nhập liệu bằng Excel ấy ). Bạn chỉ có thể sắp xếp khi dữ liệu xuất ra bởi Database Manager System ( Hệ quản trị cơ sở dữ liệu vd: Oracle hay MySQL ở trường hợp này ).

Dùng mệnh đề ORDER BY giống như sau
Code:
SELECT cot1,cot2,cot3 FROM table ORDER BY cot1 desc;


với cot1 là cột chứa số theo bạn yêu cầu, từ desc xác định việc sắp xếp theo thứ tự giảm dần từ trên xuống, còn muốn tăng dần thì bạn bỏ nó đi.

Thân,
iJust clear, "What I need to do and how to do it"/i
br
brBox tán gẫu dời về: http://www.facebook.com/hvaonline
[Up] [Print Copy]
  [Question]   Re: Sắp xếp theo số lượng các phần tử cùng giá trị trong mysql ? 08/08/2008 07:05:09 (+0700) | #5 | 145660
[Avatar]
secmask
Elite Member

[Minus]    0    [Plus]
Joined: 29/10/2004 13:52:24
Messages: 553
Location: graveyard
Offline
[Profile] [PM] [WWW]
hi anh xnohat!
tạm thời cứ coi như em đảm bảo rằng không có dữ liệu mới nào được chèn thêm vào cho đến khi thực hiện query và lấy dữ liệu ra xong. Thứ nữa là ở đây, trường "from" có 3 phần tử có giá trị bằng 1, 2 phần tử có giá trị 3 và 1 phần tử có giá trị 2, em đang muốn sắp xếp theo số lượng phần tử giảm dần trên trường "from" chứ không phải theo một trường sẵn có anh ạh.
[Up] [Print Copy]
  [Question]   Re: Sắp xếp theo số lượng các phần tử cùng giá trị trong mysql ? 08/08/2008 07:16:30 (+0700) | #6 | 145664
[Avatar]
xnohat
Moderator

Joined: 30/01/2005 13:59:19
Messages: 1210
Location: /dev/null
Offline
[Profile] [PM] [Email] [WWW] [Yahoo!] [MSN]
Vậy em muốn sắp xếp trực tiếp thứ tự dữ liệu trên bảng lưu trữ chứ không phải từ dữ liệu xuất ra à ( tức là dữ liệu chưa tới tay server script xử lý ) ?
iJust clear, "What I need to do and how to do it"/i
br
brBox tán gẫu dời về: http://www.facebook.com/hvaonline
[Up] [Print Copy]
  [Question]   Re: Sắp xếp theo số lượng các phần tử cùng giá trị trong mysql ? 08/08/2008 07:26:41 (+0700) | #7 | 145667
[Avatar]
secmask
Elite Member

[Minus]    0    [Plus]
Joined: 29/10/2004 13:52:24
Messages: 553
Location: graveyard
Offline
[Profile] [PM] [WWW]

xnohat wrote:
Vậy em muốn sắp xếp trực tiếp thứ tự dữ liệu trên bảng lưu trữ chứ không phải từ dữ liệu xuất ra à ( tức là dữ liệu chưa tới tay server script xử lý ) ? 

đúng rồi anh, xuất ra ngoài rồi thì không phải bàn nữa smilie
[Up] [Print Copy]
  [Question]   Re: Sắp xếp theo số lượng các phần tử cùng giá trị trong mysql ? 08/08/2008 07:28:49 (+0700) | #8 | 145669
[Avatar]
secmask
Elite Member

[Minus]    0    [Plus]
Joined: 29/10/2004 13:52:24
Messages: 553
Location: graveyard
Offline
[Profile] [PM] [WWW]
ah, em định viết câu truy vấn dạng như : SELECT * FROM tbl ORDER BY COUNT(from) DESC;
nhưng không hiểu thế nào mà câu truy vấn này chỉ trả lại đúng một dòng.
[Up] [Print Copy]
  [Question]   Re: Sắp xếp theo số lượng các phần tử cùng giá trị trong mysql ? 08/08/2008 07:29:32 (+0700) | #9 | 145670
[Avatar]
SuperChicken
Elite Member

[Minus]    0    [Plus]
Joined: 11/07/2006 18:31:27
Messages: 635
Location: bottom of hell
Offline
[Profile] [PM]
Code:
SELECT t1.* FROM table as t1
LEFT JOIN
(SELECT from, COUNT(from) AS cnt FROM table GROUP BY from) AS t2
ON t1.from = t2.from
ORDER BY t2.cnt DESC, t1.to;

Đã test.
[Up] [Print Copy]
  [Question]   Re: Sắp xếp theo số lượng các phần tử cùng giá trị trong mysql ? 08/08/2008 09:16:23 (+0700) | #10 | 145694
[Avatar]
secmask
Elite Member

[Minus]    0    [Plus]
Joined: 29/10/2004 13:52:24
Messages: 553
Location: graveyard
Offline
[Profile] [PM] [WWW]

SuperChicken wrote:
Code:
SELECT t1.* FROM table as t1
LEFT JOIN
(SELECT from, COUNT(from) AS cnt FROM table GROUP BY from) AS t2
ON t1.from = t2.from
ORDER BY t2.cnt DESC, t1.to;

Đã test. 

cảm ơn bác SuperChicken, cái này chạy tốt rồi, em lại không nghĩ ra dùng JOIN smilie
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|