2014-12-28 3 views
1

탐구자 테이블, 고용주 테이블, 카테고리 테이블, 관심 테이블 .. 관심의 자신의 종류에 따라 구직자와 고용주 모두의C#을 필터 비슷한 표 기록 SQL

관심 테이블에는 이익, ... 그리고 용도가있다 외래 키는 ...

FK_is_id = Seeker ID 
FK_ie_id = Employer ID 
FK_ic_id = Category ID 

그래서 데이터는 다음과 같이 저장됩니다

int_id FK_is_ID FK_ie_ID FK_ic_ID 
1   2   null  3 
2   2   null  5 
3   null  1   3 
4   null  3   1 
5   null  2   5 
6   4   null  1 

이제 테이블이 찾는 사람이이 범주 2 및 5

좋아하는 것을 보여줍니다

고용주 1 고용주 3 구분 1 ...

또한 도시 좋아, 고용주 2 카테고리 5 추천, 카테고리 3 좋아하는 추적 장치 (2)와 고용주 1 유사한 관심 및 추적 장치 (2)와 고용주 2를 가지고 동일한 관심을 가지고있다. ... 찾는 사람 ID, 간구와 같은 관심을 가지고 디스플레이 고용주에 따라 때

그래서 내가해야 할 것은 4, 고용주 (3)이 같은 관심을 가지고

찾는 ....

예를 들어, S ID (Seeker Table) 2가 주어지면 고용주 1과 고용주 2는 그와 동일한 이해 관계가 있음을 표시합니다!

Im이 코드를 사용하여 webform에 고용주 이름을 나열하십시오. 그래서 실종 된 것은 SQL Logic입니다. 도움이 필요합니다!

String ssid; 
ssid = Request.Cookies["UserSettings"]["sid"]; 
SqlConnection myConn2; 
SqlCommand myCommand2; 
SqlDataReader myReader2; 
String SQL2, divjobs; 
myConn2 = new SqlConnection(WebConfigurationManager.ConnectionStrings["ApplicationServices"].ToString()); 
divjobs = "<ul>"; 
myConn2.Open(); 
SQL2 = ""; 

myCommand2 = new SqlCommand(SQL2, myConn2); 
myCommand2.Parameters.AddWithValue("@sid", ssid); 
myReader2 = myCommand2.ExecuteReader(); 

while (myReader2.Read()) 
{ 
divjobs = divjobs + "<li>" + myReader2["e_name"] + "</a>" + "</li>"; 
} 
divjobs = divjobs + "</ul>"; 
latestEmp.InnerHtml = divjobs; 
myConn2.Close(); 
+0

당신은 MySql으로 태그를 붙 였지만 Sql 서버를위한'SqlConnection'을 사용했습니다. 또한, 당신이 게시했습니다 [질문] (http://stackoverflow.com/questions/27674168/c-sharp-filter-similar-table-records-sql/27674229) – StuartLC

+0

아, 나는 그들이 둘 다 같다고 생각. .. & 질문에 대해, 나는 그것을 충분히 설명하지 못했고, 나는 그것을 삭제하고 내가 원하는 것을 얻기를 희망하면서 좀 더 자세하게 그것을 다시 썼다. 어떤 도움이든지 appriciated 될 것이다 – Rifshan

답변

1

나는 여전히 위의 의견에 따라 당신의 RDBMS의 모르겠지만,이 Sql Fiddle here은 검색 자 아이디 주제 (나는 학생 ID 2에 대해 필터링 한)의 직원 ID 데이터를 반환합니다. 직원 또는 학생 테이블을 제공하지 않았으므로 리더에서 e_name과 같은 필드를 추출하려면이 테이블에 가입해야합니다. 방금 아래의 FK_ie_ID 외래 키를 뽑았습니다.

이것을 응용 프로그램으로 가져 오려면 @sid 매개 변수를 쿼리에 바인딩해야합니다. 또한 SqlCommands 및 독자는 IDisposable입니다. RDBMS의 선택이 MySQL을하지는 SQL 서버의 경우

마지막으로, 당신은 적절한 MySQL의 라이브러리를 참조하고 MySqlCommandMySqlConnectionSqlCommandSqlConnection을 변경해야합니다.

string SQL2 = "SELECT ins.int_id, ins.FK_is_ID, ine.FK_ie_ID" + 
" FROM " + 
" Interests ins" + // For Seekers 
" INNER JOIN Interests ine" + // For Employers 
" ON ins.FK_ic_ID = ine.FK_ic_ID " + 
" WHERE " + 
" ins.FK_is_ID = @sid " + 
" AND ine.FK_ie_ID IS NOT null "; 

using var (myCommand2 = new SqlCommand(SQL2, myConn2)) 
{ 
    myCommand2.CommandType = CommandType.Text; 
    myCommand2.Parameters.AddWithValue("@sid", ssid); 
    using (myReader2 = myCommand2.ExecuteReader()) 
    { 
    var sb = new StringBuilder; 
    while (myReader2.Read()) 
    { 
     divjobs = string.Format("<li>{0}</a></li>", (string)myReader2["FK_ie_ID"]); 
    } 
    divjobs = sb.ToString(); 
    } 
} 
+0

대단히 고맙다. 잘하고 ... 그게 정확히 내가 원하는 .. 그게 내가 말했듯이, 나는 우리의 인쇄를 위해 e_name이 필요합니다. 나는 이렇게 고용주 테이블에 e_id, e_name을 가지고 있습니다 .. 'SELECT emp .e_name, ins.int_id, ins.FK_is_ID, in.FK_is_ID "+"FROM "+"관심사 "+"INNER JOIN 관심 분야 "+"ins.FK_ic_ID = ine.FK_ic_ID "+"전체 고용주가 emp emp.e_id = ins.FK_ie_id "+"WHERE "+"ins.FK_is_ID = @sid "+"AND ".FK_ie_ID가 null이 아닙니다. ' 및 myreader2 [ "e_name"]; FK_ie_id를 출력하면 출력되지 않지만 인쇄하면 출력됩니다. – Rifshan

+0

고용주에게 완전 외부 조인 금지 - 내부 조인으로 교체하십시오. 또한 선택 목록에 emp.emp_name을 추가하십시오. – StuartLC

+0

Inner Join으로 바꿀 때 아무것도 얻지 못했지만 Full Outer Join으로 잘 작동합니다 ... 그리고 선택 목록은 무엇입니까? 처음 부분에 emp.e_name을 추가하면 ... – Rifshan