2011-02-06 2 views
3

저는 잠시 동안 이것을 숙고 해 왔습니다. 기본적으로 테이블에있는 웹 사이트 목록이 있습니다. 이 웹 사이트에는 각각 여러 개의 게시물이 있습니다. 각 게시물은 하나 이상의 다른 웹 사이트에 연결할 수 있습니다. 나는 어디에 어떤 링크가 있는지 기록한다. 특정 게시물에 연결할 수있는 모든 웹 사이트의 목록을 제공하는 쿼리를 생성해야합니다. 몇 가지 규칙이에, 그러나,이 있습니다MySQL은 단방향 연결의 복잡한 관계를 쿼리합니다.

  • 각 게시물에 여러 웹 사이트
  • 에 링크 할 수 있습니다 각 포스트는
  • 에 다시 연결하는 게시물을하지 않는 웹 사이트 만 링크 할 수 있습니다 각 게시물에 동일하게 연결할 수 있습니다 웹 사이트를 여러 번 열 수 있습니다 (예 : 링크 된 적이 있으면 괜찮습니다).

아래 웹 사이트에는 여러 개의 게시물이 있습니다. 이제 http://img140.imageshack.us/img140/815/emptyd.jpg

, 나는 A의 가능한 모든 링크가 추가하는 경우 :
http://img834.imageshack.us/img834/4931/alinks.jpg

그러나 그들에 연결되어 있기 때문에 지금 다른 사이트, A를 다시 연결할 수 없다 (규칙 2). 무슨 C를 연결할 수 아래 참조 : 그래서
http://img39.imageshack.us/img39/273/clinks.jpg

을 지금 A 또는 C 링크가 다시 링크 할 수 없습니다 아무것도이 다른 각각의 사이트에 옵션을 낮 춥니 다. 모든 웹 사이트가 모든 가능한 조합으로 연결되는 것은 아니며 쿼리에서 돌아 오는 조합 만 필요하다는 것을 기억하는 것이 중요합니다. 이제 형태를 갖추기 시작하고있다 D and G linking http://img689.imageshack.us/img689/7140/dglinks.jpg

: 나는 G와 D에서 링크를 추가 한 다음은 보면, 이들은 그들이 생산 그냥 가능하다는 것을 모든 가능한 링크되지 않습니다. 많은 웹 사이트가 H에 링크되어 있으므로 H 옵션을 연결하는 데 제한이 있습니다. 사실 그것은 F, B, E 및 그 자체에만 연결할 수 있습니다 (규칙 4).

저는 게으르지 않고 저에게 질문을 보내달라고 요청하는 것이 아닙니다. 나는 이것을 시작하고 어디서부터 시작해야할지 확신이 없도록 오랜 시간을 보냈습니다. 나는 그것의 느낌

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; 

을 : 내가 가입 크로스를 사용하여 모든 결과에 가까운 무언가를 생산할 수 있었다 http://pastie.org/1506715

: 여기

는 일부 샘플 데이터 및 테이블 구조에 대한 링크입니다 아주 가깝지만, 나는 거기에 있지 않습니다. 하위 쿼리와 함께 NOT EXISTS 절을 사용해야한다고 생각하지만 정확하게 필요한 부분은 확실하지 않습니다.

답변

1

나는 이것에 대해 약 1 시간을 보냈는데, 나는 당신에게 한 가지를 말할 수있다. 이것은 어렵다. 답변을 얻으려는 여러 가지 방법을 시도했지만 너무 효율적으로 보이지는 않지만 유일한 방법 인 것 같습니다.

당신은 차이를 찾고 있습니다. 즉, 조합이 아직 설정되지 않은 가능한 모든 조합을 선택한다는 의미입니다. 이것은 이상하게 보일 수 있지만, 그런 일이 일어나고 있습니다.

SELECT post.post_id, website.website_id 
FROM test_posts post 
    JOIN test_posts website ON website.website_id NOT IN 
(
    SELECT sl.website_id 
    FROM test_posts f 
    INNER JOIN test_smartlink_to_websites sl ON f.post_id = sl.post_id 
    WHERE f.post_id = post.post_id 
) 
ORDER BY post_id 
+0

나는 제공된 데이터에 대해 테스트를 실시하여 올바른 결과를 얻었습니다. –

+0

테스트 데이터와 라이브 데이터에서 작동하는 것으로 보입니다. 구현하고 어떻게 진행되는지 살펴 보겠습니다.진지하게, 그것을 볼 시간을내어 주셔서 대단히 감사합니다. 너무 쉽기는하지만, 실제로는 그렇지 않습니다. – Mike

+0

예, 간단하게 참여할 수있을 것이라고 생각했지만, 게임을 한 후에는 할 수 없다는 것을 깨달았습니다. 나는 SQL 전문가가 아니지만, NOT IN을 필요로하기 때문에 그게 내가 생각해 냈다. –