php - 多到多关系数据库不工作

标签 php mysql

我正在自己研究关系数据库,在阅读了一些文章后,我在实现它们时遇到了困难。

由于我缺乏使用关系数据库的经验,我认为我的错误可能出现在以下 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`)
)

注:来自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 的饮料的任何人的名字。我没有收到错误,但我没有得到任何输出。

最佳答案

你说饮料的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 或类似的东西。我认为你的顺序是错误的。

关于php - 多到多关系数据库不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19535960/

相关文章:

php - MySQL UPDATE 和 INSERT 都返回有关错误语法的错误消息,但在 phpMyAdmin 上尝试时它是正确的语法

默认启用 PHP 5.4 扩展

php - CakePHP 对象转换为数组?

php - 我的 ajax 上传带有 utf-8 字符集中西类牙字母的 csv 文件剪切了我的寄存器

mysql - 为什么我在 Mysql 中得不到返回值?

php - laravel 中 URL::to 和 URL::route 的区别

PHP mysql 多重内连接

php - Laravel 中的 BIT 数据类型渲染问题

mysql - Magento 在安装脚本中包含 .sql 文件

php - mt_rand + time() 生成的 key 如何准确且唯一以用作预订引用 ID?