我正在自己研究关系数据库,在阅读了一些文章后,我无法实现它们。
由于我缺乏关系数据库方面的经验,我相信我的错误可能出现在以下 3 个(如果不是全部 3 个)步骤中的任何一个中:
- 表创建
- 值插入
- 查询调用
我应该指出,没有任何语法错误或类似的东西。
我们谈论的是我的理解中的一个错误,所以我将详细处理这个问题。
表格:
对于抽象我选择了人和他们喜欢的饮料(一个人可以喜欢很多饮料,一种饮料可以被很多人喜欢。
这是表的代码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`)
)
注意:从这里我看到了为第三个表给出的示例,并且几乎复制了它。
值插入:
人员输入:
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 的饮料的人的姓名。我没有收到错误,但我没有得到任何输出。