当所有3个表具有相同的列MYSQL时使用JOIN

时间:2015-02-15 18:25:02

标签: php mysql inner-join

我有3张桌子......

  • posts_deletedPosts
  • posts_archivedPosts
  • posts_newPosts

我正在编写一个允许用户查看所有帖子的函数,因此我想进行连接查询,以便在一个查询中将这三个表中的所有数据拉回来。

所有三个表都有我想要的完全相同的列,它们是......

  • 标题
  • 类别
  • dateCreated会
  • 别名

到目前为止我写的查询我认为应该可行,但是当我使用bind param时,我得到了这个错误。

Warning: mysqli_stmt::bind_result() [mysqli-stmt.bind-result]: Number of bind variables doesn't match number of fields in prepared statement

我的查询如下所示......

  $stmt = $this->conx->prepare("SELECT 
    dp.title, dp.category, dp.dateCreated, dp.alias, 
    ap.title, ap.category, ap.dateCreated, ap.alias, 
    np.title, np.category, np.dateCreated, np.alias 
    FROM posts_deletedPosts AS dp 
        INNER JOIN posts_archivedPosts AS ap 
            ON dp.author = ap.author 
        INNER JOIN posts_newPosts AS np 
            ON dp.author = np.author 
    WHERE dp.author = ? 
    LIMIT 5");

我对web dev很新,但我认为可以像这样执行连接并返回一个大型数据集。之前我确实使用了3个选择查询但是我想使用AJAX构建一些分页,所以我最好在一个完整的集合中需要这些数据。

这是我如何绑定参数

$stmt->bind_param("i",$uid);

1 个答案:

答案 0 :(得分:1)

您不需要JOIN,需要UNION s:

SELECT title FROM posts_deletedPosts WHERE author=...
UNION
SELECT title FROM posts_archivedPosts WHERE author=...
UNION
SELECT title FROM posts_newPosts WHERE author=...