2011-10-07 86 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