2011-10-07 107 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更明確的*'然後。參考圖像id作爲'imgId',圖像名稱作爲'imgName',並且類別名稱作爲'catName'在'$ row []' –

+0

是的,我知道了這就是爲什麼刪除評論:)再次感謝 – 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