我试图比较两个不同的数据库表中的项目

时间:2013-09-20 05:14:52

标签: php mysql sql database

我无法在我的分类广告网站上正常工作,但基本上我正在做的是从Item表LIMIT 40中取出并在页面上显示它。现在,对于困难的部分,我将从类别表中获取所有内容,其中包含类别的名称(每个类别名称都有一个相对ID)。我需要打印出类别名称WHEN,其id等于项目的ID。希望代码有助于澄清:

$sql = mysql_query("SELECT * FROM table_item ORDER BY creationtime DESC LIMIT 40");
$sql2 = mysql_query("SELECT * FROM table_category");
$ad_count = mysql_num_rows($sql);
$row2 = mysql_fetch_array($sql2);

if($ad_count > 0){
  while($row = mysql_fetch_array($sql)){
    $item_categoryId = $row["cid"];
    $categoryId = $row2["id"];
    $categoryName = $row2["name"];
    while($item_categoryId == $categoryId){
      $catName = $categoryName;
    }
    echo $catName;
  }
}

现在,代码还有一点,然后我提出了什么,我试着保持这简短和甜蜜。它不是回显类别名称,而是实际放入HTML表格行,并且还有更多信息被放入。当我不对类别名称做任何事情时,一切正常,但是当我尝试构建要访问的内容并进行比较时,一切都变得糟透了。

另外,我应该提一下,这个嵌套的while循环似乎是解决这个问题的最好方法(我尝试了很多方法),我得到的错误是“有一个意外的'}'”。

1 个答案:

答案 0 :(得分:1)

使用连接而不是嵌套循环:

SELECT
    *
FROM
    table_item,
INNER JOIN
    table_category
ON
    table_item.cid=table_category.id
ORDER BY
    creationtime DESC
LIMIT 40

如果不是每个项目都有相应的类别,请使用LEFT JOIN而不是INNER JOIN。