我有这个问题:
$sql ="SELECT * FROM card c JOIN driver d ON c.referred_as=d.referred_as WHERE d.ID='$id'";
需要更新它以包含第3个表,这是一个包含来自各自表的驱动程序和卡ID的连接表。
表1称为card
。重要的字段是:
state_id
- 此表有3个值(1,2,3)
associated_driver
- 在referred_as
表上调用driver
//实际上不是表的一部分。由第3个表创建
referred_as
- 在associated_card
表上调用了driver
表2称为driver
。
重要的字段是:
ID
- 表的自动递增值
associated_card
- 有一个值,通常是一些数字,例如123555
//实际上并不是表格的一部分。
由第3张表创建
referred_as
- 卡表上名为associated_driver
的驱动程序()的名称
忘记添加此表:
表3称为card_driver
。重要的字段是:
driver_id
- 链接到卡的驱动程序表中的id
card_id
- 卡表中链接到驱动程序的ID
我想要发生什么:
当用户从driver
表中输入其ID时,它将比较两个表所具有的字段,即associated_card
字段(在卡表上称为referred_as
)。
associated_card
来自联接表,我不知道如何进入查询。
欢迎任何帮助。如果你需要我解释一下,我会。
--
-- Table structure for table `card`
--
CREATE TABLE IF NOT EXISTS `card` (
`id` int(11) NOT NULL auto_increment,
`startdate` date NOT NULL,
`enddate` date NOT NULL,
`state_id` int(11) NOT NULL,
`referred_as` varchar(40) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
--
-- Table structure for table `card_driver`
--
CREATE TABLE IF NOT EXISTS `card_driver` (
`card_id` int(11) NOT NULL,
`driver_id` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
-- Table structure for table `driver`
--
CREATE TABLE IF NOT EXISTS `driver` (
`id` int(11) NOT NULL auto_increment,
`title` varchar(40) default NULL,
`supplier_id` int(11) NOT NULL,
`referred_as` varchar(40) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=12 ;
一些图片:
答案 0 :(得分:0)
您的card_driver
表似乎在card
表和driver
表中的行之间实现了多对多关系。像这样的表通常称为连接表。
这样的连接表显示了两个所谓的详细信息表之间的关系,在本例中为card
和driver
。
对不起,当您在两个详细信息表格中描述referred_as
列时,我不明白您的意思。
我认为您要求的是与特定card
相关的所有driver
项。你可以得到这样的结果:
SELECT card.id, card. startdate, card.enddate, card.state_id, card.referred_as,
driver.id AS driverid, driver.title, driver.supplier_id,
driver.referred_as
FROM driver
LEFT JOIN card_driver ON card.id = card_driver.driver_id
LEFT JOIN card ON card_driver.card_id = card.id
WHERE driver.id = '$id'
这将通过card_driver
表中的多对多关系为每个卡分配给该驱动程序一行。每行将包含有关驱动程序和卡的信息。
正如您所看到的那样,它可以通过加入连接表,然后加入其他详细信息表来实现。
专业提示:请勿在生产软件中使用SELECT *
;你最好选择明确从查询中返回的列。