我正在研究自己的关系数据库,在阅读了一些文章后,我无法实现它们。
由于我缺乏关系数据库的经验,我认为我的错误可以是以下3个步骤中的任何一个(如果不是全部3个):
我应该指出,没有任何语法错误或类似的东西。
我们正在谈论我的理解中的错误,因此我将详细解决问题。
表格:
对于抽象,我选择了人们和他们喜欢的饮料(1个人可以喜欢很多饮料,很多人都喜欢喝一杯。
以下是表People
的代码(它有2个名称和一个主键):
CREATE TABLE `People`
(
`PeopleID` INT NOT NULL AUTO_INCREMENT,
`FirstName` VARCHAR(25),
`LastName` VARCHAR(25) NOT NULL,
PRIMARY KEY (`PeopleID`)
)
这是表格Drinks
(饮品名称,菜单中的某些数字或类似的东西,例如主键)
CREATE TABLE `Drinks`
(
`DrinksID` INT NOT NULL AUTO_INCREMENT,
`Code` VARCHAR(10) CHARACTER SET ascii COLLATE ascii_general_ci NOT NULL,
`Name` VARCHAR(100) NOT NULL,
PRIMARY KEY (`DrinksID`)
)
最后是表PeopleDrinks
:
CREATE TABLE `PeopleDrinks`
(
`DrinksID` INT NOT NULL default 1,
`PeopleID` INT NOT NULL default 1,
PRIMARY KEY (`DrinksID`,`PeopleID`)
)
注意:从here开始,我看到了第三张表的示例,并且几乎复制了它。
值插入:
人们输入:
INSERT INTO People (FirstName, LastName) VALUES ('John', 'Smith')
INSERT INTO People (FirstName, LastName) VALUES ('Sam', 'Johnson')
INSERT INTO People (FirstName, LastName) VALUES ('Michael', 'Morgan')
饮料输入:
INSERT INTO Drinks (Code, Name)VALUES ('#543', 'Beer')
INSERT INTO Drinks (Code, Name) VALUES ('#132', 'Vodka')
INSERT INTO Drinks (Code, Name) VALUES ('#123', 'Wine')
PeopleDrinks输入:
注意:饮品的ID是4,5和6. 不 1,2,3。
INSERT INTO PeopleDrinks (DrinksID, PeopleID) VALUES (1, 4)
INSERT INTO PeopleDrinks (DrinksID, PeopleID) VALUES (2, 5)
INSERT INTO PeopleDrinks (DrinksID, PeopleID) VALUES (3, 6)
以上我们为每个人提供最喜欢的饮料。下面我们将让一个人像所有饮料一样:
INSERT INTO PeopleDrinks (DrinksID, PeopleID) VALUES (1, 5)
INSERT INTO PeopleDrinks (DrinksID, PeopleID) VALUES (1, 6)
最后查询调用:
//Consider $link an established, working connection to the database
$result = mysqli_query($link, "SELECT
`People`.*
FROM
`People`
JOIN
`PeopleDrinks` ON `People`.`PeopleID` = `PeopleDrinks`.`PeopleID`
WHERE
`PeopleDrinks`.`DrinksID` = 5");
while($row = mysqli_fetch_array($result))
{
echo $row['FirstName'] . " " . $row['LastName'];
echo "<br/>";
}
上面的代码,应该打印任何喜欢ID为5的饮料的人的名字。我没有收到错误,但我没有得到任何输出。
答案 0 :(得分:1)
你说饮料的ID是4,5,6 在INsert中你使用了
INSERT INTO PeopleDrinks (DrinksID, PeopleID)VALUES (1, 4)
INSERT INTO PeopleDrinks (DrinksID, PeopleID) VALUES (2, 5)
INSERT INTO PeopleDrinks (DrinksID, PeopleID) VALUES (3, 6)
饮料ID(第一个数字)是1,2,3而不是4,5,6或类似的东西。我认为你的订单是错误的。
答案 1 :(得分:1)
你的多对多表需要关键:
CREATE TABLE `PeopleDrinks` (
`DrinksID` INT NOT NULL,
`PeopleID` INT NOT NULL,
PRIMARY KEY (`DrinksID`,`PeopleID`),
FOREIGN KEY (`DrinksID`) REFERENCES `Drinks`(`DrinksID`),
FOREIGN KEY (`PeopleID`) REFERENCES `People`(`PeopleID`)
)
删除DrinksID和PeopleID的默认值,这没有任何意义。
然后,当您执行插入操作时,您将确保要插入的数据是正确的。
我认为你的插入是假的。当你说你的身份证是他们的身份时,你错了。如果您正在进行大量的插入和删除操作,则尤其如此。自动增量将永远持续下去,你无法确定。使用外键,RDBMS会告诉您关系是否有问题。
无论如何,你的查询看起来很棒,所以没问题。