如果两个表的列具有相同的名称,如何在mySQL中连接两个表

时间:2018-01-12 07:00:04

标签: php mysql sql

<?php
  error_reporting(E_ALL);
  ini_set('display_errors', 1);

  require_once 'admin/include/dbconfig.php';

  $counter = 0;

  $stmt = $DB_con->prepare('SELECT f_category.f_route, f_content.f_doc, 
  f_content.f_thumb, f_content.f_title FROM f_content, f_category WHERE 
  f_content.f_id = f_category.f_id AND f_id = :uid ORDER BY f_content.id 
  DESC');

  $stmt->bindParam(':uid',$id, PDO::PARAM_INT);
  $stmt->execute();

  while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
  extract($row);
?>
  

错误 - 致命错误:未捕获PDOException:SQLSTATE [23000]:完整性约束违规:1052 where子句中的列'f_id'不明确

如何解决.. ??

谢谢

4 个答案:

答案 0 :(得分:1)

您需要在此处指定要引用的表的f_id

SELECT f_category.f_route, f_content.f_doc, f_content.f_thumb,f_content.f_title 
FROM f_content, f_category 
WHERE f_content.f_id = f_category.f_id AND f_content.f_id = :uid
ORDER BY f_content.id DESC
...AND f_id = :uid...中的

f_id应引用此处的任一表格,即f_content.f_idf_category .f_id

答案 1 :(得分:0)

在列之前使用表名或使用表别名,两个表都有一列f_id所以如果你没有为表指定表名或别名,那么在where子句中它是不明确的

SELECT b.f_route, a.f_doc,a.f_thumb, a.f_title 
FROM f_content a
JOIN f_category b ON a.f_id = b.f_id
WHERE  a.f_id = :uid 
ORDER BY a.id DESC

答案 2 :(得分:0)

您可以使用别名。

此外,您错过了在AND运算符后使用列名称的别名。

$stmt = $DB_con->prepare('SELECT b.f_route, a.f_doc, a.f_thumb, a.f_title FROM 
    f_content a, f_category b WHERE a.f_id = b.f_id AND a.f_id = :uid ORDER BY 
    a.id DESC');

答案 3 :(得分:0)

试试这个查询! 您可以创建表的别名。

SELECT 
       fca.f_route      , 
       fco.f_doc        , 
       fco.f_thumb      ,
       fco.f_title 
    FROM 
       f_content    fco , 
       f_category   fca
    WHERE 
       fco.f_id  =  fca.f_id 
    AND 
       fca.f_id  = :uid 
    ORDER BY 
       fco.id DESC