Tôi có một kịch bản mà tôi có một số lượng lớn các blog. Tất cả các blog này đều có nhiều bài đăng. Mỗi bài đăng trên blog có thể liên kết tới một bài đăng trên một blog khác, nhưng sau đó họ phải không bao giờ liên kết trở lại từ blog đó vào blog liên kết.Truy vấn SQL để xử lý mối quan hệ phức tạp
Để làm rõ:
- Site A liên kết đến các trang web B (và có thể liên kết đến trang web khác)
- Site B sau đó không thể liên kết đến trang web A (nhưng có thể liên kết đến trang web khác)
Mỗi lần đăng bài, tôi lưu trữ ID của bài đăng và ID của trang web mà nó liên kết tới. Điều quan trọng cần nhớ là khi một bài đăng duy nhất liên kết tới bất kỳ bài đăng nào trên một trang web khác mà trang web khác không thể liên kết lại từ ở bất kỳ đâu, không chỉ bài đăng được liên kết.
Trang web A có thể liên kết đến Trang web B nhiều lần tùy thích và mỗi bài đăng có thể liên kết đến nhiều bài đăng khác. Một kịch bản ví dụ có thể là:
- Site A liên kết đến các trang web B
- Site C liên kết đến các trang web B
- Site D liên kết đến các trang web Một
Trong dữ liệu trên:
- Trang web A có thể liên kết đến Trang web C (hoặc Trang web B một lần nữa)
- Trang web B có thể liên kết đến Trang web D
- Site C có thể liên kết đến trang web A hoặc trang web D (hoặc trang web B một lần nữa)
- Site D có thể liên kết đến trang web của B hoặc Site C (hoặc trang web A một lần nữa)
Dưới đây là một liên kết đến một số dữ liệu thử nghiệm và một bãi chứa của 2 bảng cần thiết: http://pastie.org/1506715
Tôi nghĩ rằng tôi cần tham gia chéo để có được tất cả các kết hợp liên kết có thể, nhưng sau đó đưa các mối quan hệ hiện có để ngăn các trang web liên kết ngược lại. Truy vấn tôi có cho đến thời điểm này là:
SELECT
t1.* , t2.* FROM test_posts t1, test_posts as t2
WHERE
t1.post_id != t2.post_id
ORDER BY
t1.post_id, t2.post_id;
Điều này mang lại cho tôi tất cả các mối quan hệ có thể có giữa các bài đăng. Những gì tôi đang đấu tranh là làm thế nào để loại trừ các mối quan hệ mà sẽ mâu thuẫn với các quy tắc trên. Các mối quan hệ trước đó được ghi lại trong bảng test_smartlinks_to_websites, với post_id thuộc trang web "originating" và website_id thuộc trang web "đích" (nhớ rằng mối quan hệ là một cách hiệu quả giữa các trang web, chứ không phải bài đăng).
Tôi đã thử sử dụng truy vấn con KHÔNG tồn tại, nhưng tôi không chắc chắn về điều khoản chính xác (hoặc cho dù đó là cách tiếp cận chính xác).
Vì vậy, đây là cấp bậc hoàn toàn phân cấp của bài đăng ??? tức là: Một liên kết tới B, B có thể liên kết tới C, C đến D, vì vậy mặc dù C và D không được liên kết rõ ràng với A, A có thể liên kết trực tiếp tới C và/hoặc D mặc dù chúng ở dưới B không? Ngoài ra, trong mẫu B này cũng sẽ không cho phép một liên kết đến D hoặc có thể nó kể từ khi nó không liên kết trực tiếp? – DRapp
Nó không phải là một hệ thống phân cấp, nó giống như một trang web của các liên kết, nhưng không ai trong số các trang web nên thích trở lại, tất cả mọi thứ nên được một chiều. (Tôi đang làm việc với BrynJ về điều này) – Mike
Có rất nhiều blog, bài đăng trong câu hỏi ... nhưng có sự ngắt kết nối giữa điều đó và bảng của bạn ... bảng nào lưu trữ những gì ... dữ liệu blog ở đâu .. dữ liệu đăng bài ở đâu ... ?? các liên kết mà bạn đã nói rất nhiều về việc lưu trữ trong bảng ...? – Mulki