2013-05-25 2 views
0

좋아, 테이블을 설정하고 쿼리 할 때 기본적으로 멍청하다.하지만 내 제목은 내가 무엇인지 설명한다. 꽤 잘하려고 노력하고 나는 JOIN을 사용하는 방법을 찾고 있다고 믿지만, 내 인생은 정확히 어떻게 해야할지 모르겠다. (나는 웹 주위에있는 예제와 튜토리얼을 읽었지만, 그 주위에 내 머리를 감쌀 수 없었다). 기본적으로 나는 3 열 Mysql을 올바르게 사용하는 방법 SELECT * FROM table WHERE column = 'Any_value_in_Array'

| userID | seriesID | series_title | 
------------------------------------ 
| int | int  | var_char | 

및 기본 키 seriesID 및 시리즈에 대한 관련 정보의 무리를 가지고 다른 테이블 series을 가지고 userFollowsSeries라는 테이블이 있습니다. 이제 각 사용자에 대해 seriesID에 대한 테이블 series의 모든 정보를 가져 오려고합니다.

지금 나는 기본적으로이

$userFollows = mysqli_query($con, "SELECT * FROM userFollowsSeries WHERE userID='$user_id'") or die(mysql_error()); 
while($follows = mysqli_fetch_array($userFollows)){ 
    $show_id=$follows['seriesID']; 
    echo $show_id; //this is realy just here for testing 
    $result = mysqli_query($con, "SELECT * FROM series WHERE id='$show_id'") or die(mysql_error()); 

    while($row = mysqli_fetch_array($result)){ 
      // i get and print out everything in a formatted for my html code 
    } 
} 

같은 단일 userID가 지금이 이상적 다음 작 매우 효율적인 것이 아니라 어떻게 알아낼 수 있다는 걸에 따라 각 seriesID을 얻으려고 이 모든 것을 하나의 명령문/쿼리에서 다시 수행하면 어떤 종류의 JOIN 문이 사용됩니다. 내가 가진 모든 것은 작동하지만 느린 것입니다 (아마도 while 루프에 포함 된 쿼리 때문일 것입니다). 어쨌든 당신이 조인이나 새로운 테이블 구조를 향상시키는 방법이 멋지고 크게 감사 할 것입니다.

답변

1

SELECT * FROM `series` WHERE `id` IN (SELECT `SeriesID` FROM `userFollowsSeries` WHERE `userID`=$user_id)의 라인을 따라 뭔가 잘 작동합니다. 색인을 잘 활용하지 못할 수도 있다는 것을 명심하십시오. ID를 선택하고, 배열을 작성한 다음, 함축을 사용하여 IN을 사용하여 배열에 결합하는 것이 더 나을 수도 있습니다.

+0

답변을 주셔서 감사합니다 ... "인덱스를 잘 활용하지 못할 수도 있습니다"라고 말하면 정확히 무엇을 의미합니까? – brendosthoughts

+0

글쎄, MySQL은 인덱스를 사용하여 데이터를 검색합니다. 이 방법은 그와 호환되지 않을 수도 있습니다. 질의 앞에'EXPLAIN'을 넣고 목록에 무엇이 있는지 확인해야한다. –

+0

괜찮아요 .. 내가 미래에 유용하게 올 것이라고 확신하므로 좀 더 EXPLAIN 메서드를 살펴볼 것입니다.하지만 모든 것이 완벽하게 작동합니다 (여기에 포스팅되지 않은 일부 포매팅은 아닙니다) 도움에 감사드립니다! +1 – brendosthoughts

0

기본적으로 JOIN은 열에 두 개의 테이블을 함께 연결합니다. 예를 들어이 걸릴 :

SELECT * FROM userFollowsSeries INNER JOIN series ON (userFollowsSeries.seriesID = series.seriesID) 

우리가 여기서하고있는 것은 각 레코드에 대해 다음의 userFollowsSeries에서 모두를 선택, 효과에,이다, ON 절에 조건을 만족하는 일련의 테이블에서 행을 부착 .

+0

안녕하세요 도움을 주셔서 감사합니다.이 코드는 mysqli_result를 잘못된 값으로 반환합니다. 무엇이 잘못되었는지 정확히 알 수는 없습니다. – brendosthoughts

+0

쿼리가 WHERE 문을 누락하면 'userID '= WHERE 문에서의 $ userID. – Tarzan

0

귀하의 질의는

SELECT s.* 
FROM userFollowsSeries ufs 
    INNER JOIN series s 
     ON s.id = ufs.seriesID 
    WHERE ufs.userID = {$user_id} 

해야 당신은 외래 키 또는 테이블 userFollowsSeries의 필드 seriesID에 인덱스를해야한다.

관련 문제