在尝试进行内部联接或仅从MYSQL的表中简单地从表中选择数据时,我遇到了获取重复数据的问题,我检查以确保没有重复数据,并且中间也没有重复数据。我想做的是使它在SELECT * FROM friends INNER JOIN users ON friends.friendsid = users.id上,然后Inner加入Newsfeed和Comments,但是当我这样做时,它会给我重复的帖子。>
有关导致此问题的原因或如何解决此问题的任何想法?提前致谢!
这是我针对该Select语句的PHP:
$stmt = $DB_con->prepare("SELECT * FROM friends INNER JOIN users ON friends.friendsid = users.id
INNER JOIN newsfeed on newsfeed.userid = friends.friendsid
INNER JOIN comments on comments.post_id = newsfeed.statusid
WHERE friends.userid = :user_id");
$stmt->bindParam(':user_id', $_SESSION['user']['id']);
$stmt->execute();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC))
{
这是我在PHPMYADMIN中运行该命令时的工作: What it looks like after running the Select statement
这是我的新闻提要表的外观:
这是我的评论表: Comments Table
Newsfeed表转储:
-
-表newsfeed
的表结构
-
CREATE TABLE `newsfeed` (
`statusid` int(255) NOT NULL,
`post_id` int(128) NOT NULL,
`userid` int(255) NOT NULL,
`status` varchar(1000) NOT NULL,
`image` varchar(255) NOT NULL,
`uploaddate` datetime NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
--
-- Dumping data for table `newsfeed`
--
INSERT INTO `newsfeed` (`statusid`, `post_id`, `userid`, `status`, `image`, `uploaddate`) VALUES
(51, 0, 0, 'KABOOM!!! :) ', '', '2018-10-10 07:13:38'),
(52, 52, 2, 'How about the refresh?!? ', '5bbe4ff2cc509.jpg', '2018-10-10 07:16:02'),
(53, 0, 3, 'Here is a new post from trail how does this look? ', '', '2018-10-16 09:31:24'),
(54, 0, 3, 'Background v3 :) ', '5bc658ba57573.jpg', '2018-10-16 09:31:38');
--
-- Indexes for dumped tables
--
评论表转储:
--
-- Table structure for table `comments`
--
CREATE TABLE `comments` (
`comment_id` int(128) NOT NULL,
`post_id` int(128) NOT NULL,
`comment_from` int(128) NOT NULL,
`comment` varchar(500) NOT NULL,
`comment_date` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
-- Dumping data for table `comments`
--
INSERT INTO `comments` (`comment_id`, `post_id`, `comment_from`, `comment`, `comment_date`) VALUES
(1, 52, 2, 'This is a Comment from user 2', '0000-00-00 00:00:00'),
(2, 51, 1, 'This is a comment for post id 51 from user id 1 ', '0000-00-00 00:00:00'),
(5, 52, 1, 'Post comment 3', '2018-10-16 09:18:14');
--
-- Indexes for dumped tables
--
然后我最终制作了一个中间表,但仍然得到重复的数据: 这是称为newsfeed_comment的中间表
--
-- Table structure for table `newsfeed_comment`
--
CREATE TABLE `newsfeed_comment` (
`id` int(128) NOT NULL,
`post_id` int(128) NOT NULL,
`comment_id` int(128) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
--
-- Dumping data for table `newsfeed_comment`
--
INSERT INTO `newsfeed_comment` (`id`, `post_id`, `comment_id`) VALUES
(1, 52, 1),
(2, 52, 2);
--
-- Indexes for dumped tables
--
答案 0 :(得分:0)
您在图像中看到的只是多个表的结果。
在此示例中,帖子数据全部相同,但评论数据不同。您看到相同的帖子数据,因为每个评论都链接到同一帖子,并且您同时提取了帖子数据和评论数据。
例如
post
1
comment post_id
1 1
2 1
你结束了这个
post comment
1 1
1 2
因为每个帖子(每行)可以有很多评论。因此,同一帖子在每一行中都有代表。这是数据库将数据显示为平面结构的唯一方法。