对于我在这里做错了什么,我真的心不在焉。
我有3张桌子:
cat_list(id,cat_title)
doc_list(id,doc_title)
cat_doc_link_table(id,link_doc_id,link_cat_id)
我正在尝试将与该类别关联的数据库中存储的任何文档显示出来,但我一直收到错误消息:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'doc_list.link_doc_id' in 'on clause'
这是我的cat_view页面的代码,它应该列出文档
<?php require_once '../db_con.php';
if(!empty($_GET['cat_id'])){
$cat = intval($_GET['cat_id']);
try{
$results = $dbh->query("SELECT *
FROM cat_List
INNER JOIN cat_doc_link_table
ON doc_list.link_doc_id = cat_doc_link_table.link_doc_id
WHERE cat_doc_link_table.link_cat_id = 3");
} catch(Exception $e) {
echo $e->getMessage();
die();
}
$doc = $results->fetchAll(PDO::FETCH_ASSOC);
if($doc == FALSE){
die();
}
}
?>
<p><?php
foreach($doc as $doc){
echo '<span class="fullname"><a href="docView.php?doc_id='.$doc["doc_id"].'">'.$doc["doc_title"]. '</a></span><br>';
};?></p>
答案 0 :(得分:2)
请改用此查询:
SELECT *
FROM doc_list
INNER JOIN cat_doc_link_table
ON doc_list.id = cat_doc_link_table.link_doc_id
WHERE cat_doc_link_table.link_cat_id = 3
您正在从OP中的cat_list
表中进行选择,这不是您想要的,因为它们正在寻找文档而不是类别。您只需要doc_list
和cat_doc_link_table
表。
您可以直接在查询中使用cat_id
,如下所示:
"SELECT * ... WHERE cat_doc_link_table.link_cat_id = {$cat};"
答案 1 :(得分:1)
这是您的查询:
SELECT *
FROM cat_List INNER JOIN
cat_doc_link_table
ON doc_list.link_doc_id = cat_doc_link_table.link_doc_id
--------^
WHERE cat_doc_link_table.link_cat_id = 3;
显示问题。没有名为``doc_list in the
来自`子句的表别名。因此错误。
最好使用表格对列名进行限定(与您一样)。但是,除非您使用表名缩写,否则代码很快就会变得难以理解。所以,我建议:
SELECT *
FROM cat_List l INNER JOIN
cat_doc_link_table dlt
ON l.id = dlt.link_cat_id
WHERE dlt.link_cat_id = 3;
我猜测在cat_list
中调用了id列。
此外,在将列返回给应用程序时,不应使用select *
。而是列出您要使用的列。这样,如果数据库结构发生变化,您将得到一个可理解的查询错误,而不是一些奇怪的应用程序错误。