复选框检查数据库数据

时间:2015-02-12 17:16:04

标签: php mysql checkbox

我有两个mysql表,如下所示。我使用PHP和MySQL

CREATE TABLE IF NOT EXISTS `subject_category` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`sid` int(5) DEFAULT NULL,
`category` varchar(50) DEFAULT NULL,
`subject` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=191 ;

INSERT INTO `subject_category` (`id`, `sid`, `category`, `subject`) VALUES
(1, 1, 'GCE O/L', 'Sinhala'),
(2, 2, 'GCE O/L', 'Development Studies'),
(3, 3, 'GCE O/L', 'History'),
(4, 4, 'GCE O/L', 'Mathematics'),
(5, 5, 'GCE O/L', 'Citizan Education'),

CREATE TABLE IF NOT EXISTS `user_subjects` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`uid` bigint(20) NOT NULL,
`usid` int(4) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=43 ;

INSERT INTO `user_subjects` (`id`, `uid`, `usid`) VALUES
(11, 142247454430186, 1),
(12, 142247454430186, 3),
(13, 142247454430186, 5)

实际上我需要的是,需要使用第一个表数据创建复选框数组。这部分已经完成了。然后我需要检查特定user_subject.uid的第二个表(subject_category.id = user_subjects.usid)的复选框匹配

最后我需要在第一个表格中输入5个复选框,其中3个选择了第二个表值

请帮我解决这个问题

1 个答案:

答案 0 :(得分:0)

我认为你从错误的方向开始,你应该分一步完成,而不是两步。

您需要的mysql查询是:

$query = 'SELECT sc.subject, CASE WHEN us.id IS NULL THEN "" ELSE "checked" AS checked
 FROM subject_category sc
  LEFT JOIN user_subjects us ON (us.usid = sc.id)';

使用此查询的结果,您应该能够立即生成已选中和未选中的复选框。

注意:我不知道您需要哪些列,以及在连接中是否需要sc.id或sc.sid,但我认为您可以使用此示例创建正确的查询。

下一步PHP(使用mysql_ *函数作为TS请求注释,我知道你应该使用PDO或mysqli):

$result = mysql_query($query);
while ($line = mysql_fetch_assoc($result)){
  echo '<input type="checkbox" checked="'.$line['checked'].'" name="subject" value="'. $line['subject'] .'" /> '.$line['subject'];
}