2011-10-07 5 views
0

매우 간단한 쿼리가 있지만 그 안에 다른 쿼리를 만들어야합니다. SQL과 PHP에 대한 지식이 거의 없으므로 귀하의 도움을 요청하겠습니다.PHP - 쿼리 내부 쿼리

$result = mysql_query("SELECT * FROM img"); 
while ($row = mysql_fetch_assoc($result)) 
{ 
    $imgName = $row['name']; 
    $catID = $row['catid']; 
    // Problem 
    // Need to get category NAME from category ID 
    $result2 = mysql_query("SELECT name FROM cat WHERE id = $catID"); 
    while ($row2 = mysql_fetch_assoc($result2)) 
    { 
     $catName = $row2['name']; 
    } 

    echo "Image: $imgName <br />"; 
    echo "Category: $catName"; 
} 

답변

4

이렇게하면 범주 이름을 얻는 데는 간단한 JOIN 인 것으로 보입니다. 단일 쿼리를 사용할 수 있습니다.

SELECT 
    img.id AS imgId, 
    img.name AS imgName, 
    cat.name AS catName 
FROM img JOIN cat ON img.catid = cat.id 

초기 쿼리를 위와 같이 바꾸면 내부 쿼리가 필요하지 않습니다.

+0

위의 편집을 참조하십시오 @Qmal - IMG'보다 더 명시 적으로 수를 *'다음. 'imgName'이라는 이미지 이름과'$ row []'의'catName'이라는 카테고리 이름 –

+0

그래, 그게 그 코멘트를 삭제 한 이유입니다 :) Thanks again – sed

0

이렇게하면됩니다. 각 행에있는 각 테이블의 모든 img 속성과 cat.name 값을 볼 수 있습니다.

SELECT *, cat.name as catname FROM img 
INNER JOIN cat 
ON cat.id = img.catid 
+1

고양이를 선택하지 않았습니다. .name을 select 문에 입력하십시오. – Arda

0

당신이 하나에 간단한 하위 쿼리를 할 수있는 :.

$result = mysql_query(" 
SELECT name, catid, (SELECT name FROM cat WHERE id = img.catid) AS cat_name 
FROM img 
"); 
+1

어, 확실하지 않습니다. 꽤 느릴 수있는 테이블에 많은 행이있는 경우. 내부 조인을하는 것이 훨씬 나은 해결책 인 것 같습니다. – Max