Mysql 如何连接多个外键?
我正在使用PHP和SQL创建一个博客,我正在尝试在1 SQL查询中查询所有内容,这样我就可以带出作者的所有评论和作者的所有博客。它们中的每一个都有Mysql 如何连接多个外键?,mysql,sql,Mysql,Sql,我正在使用PHP和SQL创建一个博客,我正在尝试在1 SQL查询中查询所有内容,这样我就可以带出作者的所有评论和作者的所有博客。它们中的每一个都有user.uuid作为外键 我的博客表如下所示: CREATE TABLE `blogs` ( `uuid` int(255) NOT NULL, `title` varchar(1024) NOT NULL, `detail` varchar(1024) NOT NULL, `user_id` int(255) NOT NULL,
user.uuid
作为外键
我的博客表如下所示:
CREATE TABLE `blogs` (
`uuid` int(255) NOT NULL,
`title` varchar(1024) NOT NULL,
`detail` varchar(1024) NOT NULL,
`user_id` int(255) NOT NULL,
`created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `blogs_comments` (
`uuid` int(255) NOT NULL,
`blog_uuid` int(255) NOT NULL,
`user_uuid` int(255) NOT NULL,
`comment` varchar(250) NOT NULL,
`created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `users` (
`uuid` int(255) NOT NULL,
`username` varchar(15) COLLATE utf8_unicode_ci NOT NULL,
`password` varchar(64) COLLATE utf8_unicode_ci NOT NULL,
`foreName` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
`surName` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
`email` text COLLATE utf8_unicode_ci NOT NULL,
`number` int(11) NOT NULL,
`created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`is_admin` tinyint(1) NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
我的博客评论表如下所示:
CREATE TABLE `blogs` (
`uuid` int(255) NOT NULL,
`title` varchar(1024) NOT NULL,
`detail` varchar(1024) NOT NULL,
`user_id` int(255) NOT NULL,
`created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `blogs_comments` (
`uuid` int(255) NOT NULL,
`blog_uuid` int(255) NOT NULL,
`user_uuid` int(255) NOT NULL,
`comment` varchar(250) NOT NULL,
`created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `users` (
`uuid` int(255) NOT NULL,
`username` varchar(15) COLLATE utf8_unicode_ci NOT NULL,
`password` varchar(64) COLLATE utf8_unicode_ci NOT NULL,
`foreName` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
`surName` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
`email` text COLLATE utf8_unicode_ci NOT NULL,
`number` int(11) NOT NULL,
`created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`is_admin` tinyint(1) NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
我的用户表如下所示:
CREATE TABLE `blogs` (
`uuid` int(255) NOT NULL,
`title` varchar(1024) NOT NULL,
`detail` varchar(1024) NOT NULL,
`user_id` int(255) NOT NULL,
`created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `blogs_comments` (
`uuid` int(255) NOT NULL,
`blog_uuid` int(255) NOT NULL,
`user_uuid` int(255) NOT NULL,
`comment` varchar(250) NOT NULL,
`created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `users` (
`uuid` int(255) NOT NULL,
`username` varchar(15) COLLATE utf8_unicode_ci NOT NULL,
`password` varchar(64) COLLATE utf8_unicode_ci NOT NULL,
`foreName` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
`surName` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
`email` text COLLATE utf8_unicode_ci NOT NULL,
`number` int(11) NOT NULL,
`created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`is_admin` tinyint(1) NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
以下是我当前的SQL:
SELECT
b.uuid AS 'Blog ID', b.title AS 'Blog Title', b.detail AS 'Blog Body', u.uuid AS 'Blog Author ID', u.username AS 'Blog Author Username',
(SELECT bc.comment WHERE u.uuid = bc.user_uuid) AS 'Comment',
(SELECT u.uuid WHERE u.uuid = bc.user_uuid) AS 'Comment Author ID',
(SELECT u.username WHERE u.uuid = bc.user_uuid) AS 'Comment Author Username'
FROM blogs b
INNER JOIN blogs_comments bc ON b.uuid = bc.blog_uuid
INNER JOIN users u ON b.user_id = u.uuid
查询工作正常,但有意外输出,如下所示:
CREATE TABLE `blogs` (
`uuid` int(255) NOT NULL,
`title` varchar(1024) NOT NULL,
`detail` varchar(1024) NOT NULL,
`user_id` int(255) NOT NULL,
`created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `blogs_comments` (
`uuid` int(255) NOT NULL,
`blog_uuid` int(255) NOT NULL,
`user_uuid` int(255) NOT NULL,
`comment` varchar(250) NOT NULL,
`created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `users` (
`uuid` int(255) NOT NULL,
`username` varchar(15) COLLATE utf8_unicode_ci NOT NULL,
`password` varchar(64) COLLATE utf8_unicode_ci NOT NULL,
`foreName` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
`surName` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
`email` text COLLATE utf8_unicode_ci NOT NULL,
`number` int(11) NOT NULL,
`created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`is_admin` tinyint(1) NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
我希望输出将注释作者的所有注释放在一行中,然后每一行都特定于注释作者。即:
Comment Author Comment Comment
Jaquarh TEST Lorem Ipsum
你需要知道每次你会有多少评论,但如果你这样做,一个轴心可能会给你你所需要的。我对您的查询结构有点困惑,但我认为它可能看起来像这样,带有一个轴心:
SELECT
blog_id AS 'Blog ID',
title AS 'Blog Title',
detail AS 'Blog Body',
blog_author_id AS 'Blog Author ID',
username AS 'Blog Author Username',
Comment_Author_ID AS 'Comment Author ID',
Comment_Author_Username AS 'Comment Author Username',
[0] AS 'Comment 1',
[1] AS 'Comment 2',
[2] AS 'Comment 3',
[3] AS 'Comment 4',
[4] AS 'Comment 5',
[5] AS 'Comment 6'
FROM
(SELECT --A1
b.uuid as blog_id, b.title, b.detail, u.uuid as blog_author_id, u.username,
(SELECT bc.comment WHERE u.uuid = bc.user_uuid) AS Comment,
(SELECT u.uuid WHERE u.uuid = bc.user_uuid) AS Comment_Author_ID,
(SELECT u.username WHERE u.uuid = bc.user_uuid) AS Comment_Author_Username,
row_number() over(partition by b.uuid order by bc.comment) AS row_num
FROM blogs b
INNER JOIN blogs_comments bc ON b.uuid = bc.blog_uuid
INNER JOIN users u ON b.user_id = u.uuid AND u.uuid = bc.user_uuid
) as A1
PIVOT
(max([comment]) FOR row_num in ([0], [1], [2], [3], [4], [5])) AS pvt
这篇文章可能也会对你有所帮助:你需要知道每次你会有多少评论,但如果你这样做,一个轴心可能会给你你所需要的。我对您的查询结构有点困惑,但我认为它可能看起来像这样,带有一个轴心:
SELECT
blog_id AS 'Blog ID',
title AS 'Blog Title',
detail AS 'Blog Body',
blog_author_id AS 'Blog Author ID',
username AS 'Blog Author Username',
Comment_Author_ID AS 'Comment Author ID',
Comment_Author_Username AS 'Comment Author Username',
[0] AS 'Comment 1',
[1] AS 'Comment 2',
[2] AS 'Comment 3',
[3] AS 'Comment 4',
[4] AS 'Comment 5',
[5] AS 'Comment 6'
FROM
(SELECT --A1
b.uuid as blog_id, b.title, b.detail, u.uuid as blog_author_id, u.username,
(SELECT bc.comment WHERE u.uuid = bc.user_uuid) AS Comment,
(SELECT u.uuid WHERE u.uuid = bc.user_uuid) AS Comment_Author_ID,
(SELECT u.username WHERE u.uuid = bc.user_uuid) AS Comment_Author_Username,
row_number() over(partition by b.uuid order by bc.comment) AS row_num
FROM blogs b
INNER JOIN blogs_comments bc ON b.uuid = bc.blog_uuid
INNER JOIN users u ON b.user_id = u.uuid AND u.uuid = bc.user_uuid
) as A1
PIVOT
(max([comment]) FOR row_num in ([0], [1], [2], [3], [4], [5])) AS pvt
这篇文章也可能对您有所帮助: