一对多关系仅显示第一行


one to many relation-displays first row only

经过多次尝试,我终于可以显示子表中的数据了。我有 2 张表,用户(父(和用户广告(子(。

用户-ID (pk(-名字-用户名-泰尔诺

用户广告-id(索引(等。。。。。。。。。

这是一个 1 对多的关系。 从表用户到表用户广告。 表用户

假设根据与表用户中的 ID 匹配的特定 ID 从表用户广告中提取许多行。但是,相反,它只显示用户广告的第一行。无论您如何使用不同的用户名登录,您都将始终看到useradvert的第一行,而不是应该显示的行。供您参考,我是新手。任何帮助,不胜感激。TQS.

以下是摘录;

$query = "SELECT * FROM users,useradvert WHERE users.id=useradvert.id";
$stmt = $conn->prepare($query); 
$stmt->execute();
$res = $stmt->get_result(); 
$row2 = $res->fetch_array();

$_SESSION['name2'] = $row2['name2'];
$_SESSION['color2'] = $row2['color2'];
$_SESSION['hobby2'] = $row2['hobby2'];
$_SESSION['radiobtn'] = $row2['radiobtn'];
$_SESSION['kupon'] = $row2['kupon'];
$_SESSION['image'] = $row2['image'];
$_SESSION['image2'] = $row2['image2'];

以下是摘录 - 在同一页面上继续

 <?php
  //display record from table- useradveret -(child table)
//    while($row = $res->fetch_array()){

    echo $_SESSION['name2']."<br/>";
    echo $_SESSION['color2']."<br/>";
    echo $_SESSION['hobby2']."<br/>";
    echo $_SESSION['radiobtn']."<br/>";
    echo $_SESSION['kupon']."<br/>";
    echo $_SESSION['image']."<br/>";
    echo $_SESSION['image2']."<br/>";
//  }

?>

用户广告的表查询

-- 表useradvert的表结构

CREATE TABLE IF NOT EXISTS `useradvert` (
  `id` int(10) unsigned NOT NULL,
  `name2` varchar(60) COLLATE utf8_unicode_ci NOT NULL,
  `color2` varchar(60) COLLATE utf8_unicode_ci NOT NULL,
  `hobby2` varchar(60) COLLATE utf8_unicode_ci NOT NULL,
  `radiobtn` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
  `kupon` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
  `image` varchar(60) COLLATE utf8_unicode_ci NOT NULL,
  `image2` varchar(60) COLLATE utf8_unicode_ci NOT NULL,
  KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
--
-- Dumping data for table `useradvert`
--
INSERT INTO `useradvert` (`id`, `name2`, `color2`, `hobby2`, `radiobtn`, `kupon`, `image`, `image2`) VALUES
(97, 'testthree nickname', 'colorthree', 'hobbythree', 'female', '', 'uploads/testpic1.jpg', 'uploads/testpic2.jpg'),
(99, 'testfivenamecick', 'testfivehcolor', 'testfivecolor', 'female', '', 'uploads/testpic3.jpg', 'uploads/testpic4.jpg'),
(97, 'lagitestthree', 'trheecolor', 'threehobby', 'female', '', 'uploads/testpic5.jpg', 'uploads/testpic6.jpg');
--
-- Constraints for dumped tables
--
--
-- Constraints for table `useradvert`
--
ALTER TABLE `useradvert`
  ADD CONSTRAINT `useradvert_ibfk_1` FOREIGN KEY (`id`) REFERENCES `users` (`id`);

我想你的 sql 查询不正确。Yo 使用用户广告表的 id 字段,但那是该表的索引字段。这看起来不对劲。你应该在用户广告表中有一个外键 userId,用于连接。然后,您的查询应如下所示:

SELECT * FROM users u
INNER JOIN useradvert ua ON u.id = ua.userId

然后,您应该获取用户的所有用户广告字段。

这两个表应如下所示:

表用户:

id | name | ... 
1 | Ben | ... 
2 | Markus | ... 

表格用户广告:

id | userid | ... 
1 | 1 | ... 
2 | 1 | ... 

UserAdvert 中的 userID 是用于在 2 个表之间创建关系的外键。这有意义吗?