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 [?] Xin hỏi về SQL  XML
  [Question]   [?] Xin hỏi về SQL 26/03/2008 23:00:15 (+0700) | #1 | 121319
zeroFILL
Member

[Minus]    0    [Plus]
Joined: 08/09/2007 13:04:22
Messages: 10
Offline
[Profile] [PM]
Tôi dùng CSDL MySQL và có 2 bảng như sau:

-- products --
pid
name
...

-- relationships --
pid
cid

Bảng products chứa sản phẩm, còn bảng relationships là mối quan hệ giữa sản phẩm và danh mục sản phẩm (1 sản phẩm có thể thuộc nhiều danh mục khác nhau, 1 danh mục có thể có nhiều sản phẩm).

Vậy khi tôi muốn lấy tất cả thông tin về các sản phẩm có cùng danh mục với một sản phẩm cho trước thì phải làm như thế nào? Mong các bạn giúp tôi câu SQL này. Xin cảm ơn!
[Up] [Print Copy]
  [Question]   [?] Xin hỏi về SQL 27/03/2008 03:28:28 (+0700) | #2 | 121361
safari
Member

[Minus]    0    [Plus]
Joined: 31/01/2008 01:19:23
Messages: 33
Location: somewhere
Offline
[Profile] [PM]
Bồ hãy phân tích vấn đề theo hướng bottom-up, như sau:

1) Lấy danh sách các danh mục sản phẩm chứa sản phẩm cho trước
2) Lấy danh sách tất cả các sản phẩm có danh mục sản phẩm thuộc vào 1)
[Up] [Print Copy]
  [Question]   Re: [?] Xin hỏi về SQL 28/03/2008 23:43:40 (+0700) | #3 | 121745
zeroFILL
Member

[Minus]    0    [Plus]
Joined: 08/09/2007 13:04:22
Messages: 10
Offline
[Profile] [PM]
Cảm ơn bạn vì câu trả lời gãi đúng chỗ ngứa smilie Nếu bạn có câu SQL nào giải quyết được vấn đề này thì xin chỉ dẫn. Có lẽ tôi phải đi học 1 lớp bổ túc về SQL quá smilie
[Up] [Print Copy]
  [Question]   Re: [?] Xin hỏi về SQL 29/03/2008 02:10:19 (+0700) | #4 | 121775
safari
Member

[Minus]    0    [Plus]
Joined: 31/01/2008 01:19:23
Messages: 33
Location: somewhere
Offline
[Profile] [PM]
Đây nè:

1) Lấy danh sách các danh mục sản phẩm chứa sản phẩm cho trước, ví dụ id sản phẩm cho trước là 100:
Code:
SELECT cid FROM relationships r1 JOIN products p1 ON p1.pid=100 and p1.pid=r1.pid


2) Lấy danh sách tất cả các sản phẩm có danh mục sản phẩm thuộc vào 1), câu where cuối cùng để loại sản phẩm cho trước ra khỏi danh sách:
Code:
SELECT p.* FROM products p JOIN relationships r ON r.pid=p.pid AND r.cid IN (SELECT cid FROM relationships r1 JOIN products p1 ON p1.pid=100 and p1.pid=r1.pid) WHERE p.pid<>100;


Thực ra câu này vẫn chưa tối ưu, bồ tự nghĩ thử làm cách nào để tối ưu câu trên.

Hy vọng lần sau bồ hỏi những câu khó hơn smilie
[Up] [Print Copy]
  [Question]   Re: [?] Xin hỏi về SQL 29/03/2008 06:09:50 (+0700) | #5 | 121832
subnetwork
Member

[Minus]    0    [Plus]
Joined: 05/09/2004 06:08:09
Messages: 1666
Offline
[Profile] [PM] [WWW] [Yahoo!]

zeroFILL wrote:
Cảm ơn bạn vì câu trả lời gãi đúng chỗ ngứa smilie Nếu bạn có câu SQL nào giải quyết được vấn đề này thì xin chỉ dẫn. Có lẽ tôi phải đi học 1 lớp bổ túc về SQL quá smilie  


Trên cơ sở dữ liệu
select, insert, update, delete, create, drop, index, alter

Muốn cái nào ? smilie
Quản lý máy chủ, cài đặt, tư vấn, thiết kế, bảo mật hệ thống máy chủ dùng *nix
http://chamsocmaychu.com
[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|