从连接表中获取数据

时间:2015-06-26 08:54:35

标签: php mysql

我正在尝试从我的数据库中提取数据,其中包含以下内容:

x3表:

docs
  doc_id - index
cat
  cat_id - index
doc_cat_join
  doc_id - foreign key to docs/doc_id
  cat_id - foreign key to cats/cat_id

我已经插入了一些数据,因此我在cat中有一行,docs和连接表中的行绑定了一个带有doc_id的cat_id,这一切都正常。我想把它从表中拉出并显示出来,到目前为止这是我的方法,但没有得到任何结果,我想知道我的失败在哪里,因为我没有错误?

当我在脚本中访问cateroy页面时,我从网址获取了id:

    $id = $_GET['cat_id'];           

    $q = sprintf("
        SELECT
        docs.doc_id,doc_name
        FROM docs
        INNER JOIN doc_cat_join
        ON cats.cat_id = doc_cat_join.cat_id
        WHERE doc_cat_join.doc_id = '%s'
        ",

        mysqli_real_escape_string($dbc, $id) );

    $r = mysqli_query($dbc,$q)
        or die ("Couldn't execute query: ".mysqli_error($dbc));


    // FETCH AND PRINT ALL THE RECORDS

    echo '<div class="view_body">';

    while ($row = mysqli_fetch_array($r)) {
        echo '<a href="doc_view.php?doc_id='.$row["doc_id"].'"> '.$row["doc_name"]. '</a><br>';

    }
    echo '</div>';           
}

由于某些奇怪的原因我什么都没得到,如果我在$ r上做var_dump我会得到以下结果:

string(168) " SELECT docs.doc_id,doc_name FROM docs INNER JOIN doc_cat_join ON cats.cat_id = doc_cat_join.cat_id WHERE doc_cat_join.doc_id = '24' "  

因此它获得了我所在的正确类别ID。

我现在得到以下输出:

Couldn't execute query: Unknown column 'cats.cat_id' in 'on clause'

2 个答案:

答案 0 :(得分:1)

$id = $_GET['cat_id']; 

$q = sprintf("
SELECT
*
FROM docs
INNER JOIN doc_cat_join
ON docs.doc_id = doc_cat_join.doc_id
INNER JOIN cat
ON doc_cat_join.cat_id = cat.cat_id
WHERE doc_cat_join.cat_id = '$id'
",

mysqli_real_escape_string($dbc, $id) );

print_r ($q);


// FETCH AND PRINT ALL THE RECORDS

echo '<div class="view_body">';

while ($row = mysqli_fetch_array($r)) {

echo '<a href="doc_view.php?doc_id='.$row["doc_id"].'"> '.$row["doc_name"].        '</a><br>';

}
echo '</div>';           
}

我认为你的查询错了。

答案 1 :(得分:1)

根据您的输入和查询设计,您的查询应如下所示 -

SELECT d.doc_id, d.doc_name 
FROM docs AS d 
INNER JOIN doc_cat_join AS dc ON dc.doc_id = d.doc_id WHERE dc.cat_id = '24';

注意:如果不是,则显示您需要的输出。