Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何联接两个表并返回两个表中的所有行_Php_Mysql_Join_Inner Join - Fatal编程技术网

Php 如何联接两个表并返回两个表中的所有行

Php 如何联接两个表并返回两个表中的所有行,php,mysql,join,inner-join,Php,Mysql,Join,Inner Join,我有两张桌子。对于用户和书籍,我希望联接这两个表并返回这两个表的所有行。中的公共列为“uid” 用于书籍的sql语句 SELECT * FROM books ORDER BY TIME DESC; 从上面我得到了用户id“uid”,并在单独的查询中使用它 和用户 SELECT * FROM users WHERE uid = '$uid'; 我希望最终得到如下内容,而不是从table.books和table.users进出数据库 while($row = mysqli_fetch_array

我有两张桌子。对于用户和书籍,我希望联接这两个表并返回这两个表的所有行。中的公共列为“uid”

用于书籍的sql语句

SELECT * FROM books ORDER BY TIME DESC;
从上面我得到了用户id“uid”,并在单独的查询中使用它

和用户

SELECT * FROM users WHERE uid = '$uid';
我希望最终得到如下内容,而不是从table.books和table.users进出数据库

while($row = mysqli_fetch_array($query)){
           echo $row[book_name];
           echo $row[user_firstname];
   }

谢谢。

您必须在数据库中查找联接的funda,以了解如何联接两个表以检索特定数据

试试这个:

SELECT *
FROM books b 
INNER JOIN users u ON b.uid = u.uid 
ORDER BY b.TIME DESC;

选择a,b。从books a内部加入用户b ON(a.id=b.uid)

在不进行任何过滤的情况下,尝试使用下面的查询来查询两个表中的所有数据

select * from Users u,Books b where u.user_id=b.uid

如果给定GROUP BY或任何其他约束,则在“Where”子句后面使用“and”标记条件。

这将返回来自书籍和用户的所有行

SELECT * 
FROM books b 
FULL OUTER JOIN users u ON b.uid=u.uid;

选择books.bookname,users.user\u firstname from books join users on books.id=users.id

试试这个方法它会起作用:

使用内部联接

SELECT t1.*,t2.`user_firstname` FROM books t1
    JOIN users t2 ON t2.`uid` = t1.`uid`

这称为完全连接,您可以在MySql中实现它

SELECT *
FROM books AS b 
LEFT JOIN users AS u ON b.uid = u.uid 

UNION

SELECT *
FROM books AS b 
RIGHT JOIN users AS u ON b.uid = u.uid
有条不紊

SELECT t.*
FROM (
    SELECT *
    FROM books AS b 
    LEFT JOIN users u ON b.uid = u.uid 

    UNION

    SELECT *
    FROM books AS b 
    RIGHT JOIN users AS u ON b.uid = u.uid 
) t
ORDER BY t.TIME DESC;

请分享一些示例数据和您试图获得的结果。具体地说,请注意,如果某个用户有多本书,您需要什么样的输出。“连接这两个表并返回两个表的所有行”&“类似”不清楚。请讲一讲。使用足够的单词、句子和引用部分例子,清楚、完整地说出你的意思。在给出业务关系(ship)/关联或表(基或查询结果)时,请说明其中的一行根据其列值对业务状况的说明。
outer join
会更好。这是正确的,我这边有一个问题,两个表都有一列“Title”,如何从书籍中获取标题,而不是从用户那里获取标题$行['title']表示用户的标题,而不是书本中的标题。我想返回所有行,而不仅仅是书本名。在书本上,您仍然只选择
user\u firstname
,它应该是*。从
users
表中,我只选择
user\u firstname
。这是您的选择,您可以使用
*
…语法在第3行使用“完全外部连接用户u ON b.uid=u.uid”您正在发布的问题不清楚。它应该被否决,被标记/投票关闭,并对要求澄清的问题发表评论,而不是在回答帖子中猜测。(无论哪一个有足够的声誉。)这也是另一个答案的副本。请不要发布重复的答案或添加任何新内容。在发布之前,请查看编辑框下方的格式化版本。阅读“编辑帮助”“重新内联和块格式”“代码和引号”“重新换行符”。
SELECT b.*, u.uid
FROM books b 
INNER JOIN users u ON b.uid = u.uid 
ORDER BY b.TIME DESC;