Php 检查表中的最新值并将其添加到表中

Php 检查表中的最新值并将其添加到表中,php,mysql,sql,Php,Mysql,Sql,因为我有几个“项目”,每个项目都应该包含许多问题,所以我有一个问题页面,在那里我填写了一个视频链接、四个答案和四个drow down列表,用户可以为每个答案设置分数 然而,在数据库中我有两个表 一个表,“问题”,包含以下列:pid(项目id)、qid(问题id)和问题链接。另一个表“answer_det”有以下列:pid、qid、aid、answer和points 当我填写并执行我的问题页面时,我已经做了,所以每个答案都有一个id。在表“answer_det”中,Pid、Aid、answer和p

因为我有几个“项目”,每个项目都应该包含许多问题,所以我有一个问题页面,在那里我填写了一个视频链接、四个答案和四个drow down列表,用户可以为每个答案设置分数

然而,在数据库中我有两个表

一个表,“问题”,包含以下列:pid(项目id)、qid(问题id)和问题链接。另一个表“answer_det”有以下列:pid、qid、aid、answer和points

当我填写并执行我的问题页面时,我已经做了,所以每个答案都有一个id。在表“answer_det”中,Pid、Aid、answer和points正在设置。这就是它的样子:

当我为Pid=1的第一个项目插入第一个问题时,“问题”表:

我现在要做的是设置qid(问题id)。我不知道怎么做,但我认为我应该有一个代码来检查pid的最大qid,并向其中添加1,以便同一项目的每个新问题都得到一个新的qid。如果pid不在表中,则qid应获得值“1”

因此,如果您查看第一张图片,在显示的每一行上,qid应该是1,因为所有四个答案都属于同一个问题,这是pid=1的项目的第一个问题。所以,如果我想在同一个项目中添加一个问题,它看起来应该是一样的,但是qid=2,以此类推。如果我为项目2添加一个新的(第一个)问题,qid应该从1开始,依此类推。然后,如果我想为第一个项目再次添加一个新问题,代码应该检查最大qid是否为2,其中pid为1,然后插入一个带有答案但qid=3的新问题

它应该以几乎相同的方式在表格“问题”上工作,如第二张图片所示。当创建第一个问题时,除了我在“answer_det”-表中描述的问题之外,我希望第一个项目的第一个问题(pid=1)也有qid=1和我填写的链接。pid=1的项目的第二个问题应该得到qid=2。如果我为一个新项目添加第一个问题,那么它应该是pid=2和qid=1。然后,如果我想把第三个问题附加到第一个问题上,应该看到pid=1有两个问题(qid=2),加上1,第三个问题看起来像pid=1和qid=3

这是我现在拥有的代码,其中没有任何代码在两个表中的qid中插入任何内容


我有一个答案和一个建议给你:]

答复: 如果要将qid添加到每个问题中,则需要在插入问题之前插入问题,并使用mysqli_last_insert()函数获取qid:

$que = "INSERT INTO question VALUES('$pid5','','$video');";

mysqli_query($mysqli,$que);

$qid = mysqli_insert_id($conn); // get last inserted ID of the question

$que = "INSERT INTO answer_det VALUES('$pid5','$qid','$aid1','$answ1','$point1');";
// and so on
我的建议是: 我认为您可能需要采用不同的数据库结构

这是你的结构

// question table
| pid | qid |    question_link   |
|-----|-----|--------------------|
|  1  |  0  | http://example.com |

// question_det
| pid | qid | aid | answer | points |
|-----|-----|-----|--------|--------|
|  1  |     |  1  | Yes    | 10     |
使用完全不同的列作为主键是不好的做法。。。例如,您的表问题的主键应该是qid而不是pid;对于同一问题的问题表,主键应为aid而不是pid,并且两者都应设置为自动递增,因此每次插入新问题或问题时,它都会自动增加qid和aid列

你应该有这样的东西:

//create a table called 'project' to store them:
| pid |   project_name   |
|-----|------------------|
|  1  | project 1        |
|  2  | amazing project! |

//create a table called 'question':

| qid | pid |      question    |   question_link   |
|-----|-----|------------------|-------------------|
|  1  |  1  | super question   | http:/example.com |
|  2  |  1  | question?        | http:/example.com |
|  3  |  2  | more questions?  | http:/example.com |

// and finally create a table called 'answer'

| aid | qid |     answer    | points |
|-----|-----|---------------|--------|
|  1  |  1  | Yes           | 10     |
|  2  |  1  | No            | 20     |
|  3  |  1  | Maybe         | 30     |
|  4  |  1  | I do not know | 40     |
注意:每个表ID应设置为自动增量

PHP代码应该是这样的:

<?php
ini_set('display_errors',1);
error_reporting(E_ALL);

$pid = $_POST['pid']; // project ID
$question = $_POST['question']; // question may have a 'title' ?
$video = $_POST['videolink1'];

// the asnwers!
$answ1 = $_POST['ans1'];
$answ2 = $_POST['ans2'];
$answ3 = $_POST['ans3'];
$answ4 = $_POST['ans4'];

// the points!
$point1 = $_POST['pointset1'];
$point2 = $_POST['pointset2'];
$point3 = $_POST['pointset3'];
$point4 = $_POST['pointset4'];

// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}

$query = "INSERT INTO question (pid,question,question_link) VALUES ({$pid},'{$question}','{$video}');";


if(mysqli_query($conn,$query)) {
    echo "<br>Question Information stored successfully!";

    $qid = mysqli_insert_id($conn); // get last inserted ID of the question

    $query = "INSERT INTO answer(qid, answer, points) VALUES ({$qid},'{$answ1}',{$point1});";
    $query .= "INSERT INTO answer(qid, answer, points) VALUES ({$qid},'{$answ2}',{$point2});";
    $query .= "INSERT INTO answer(qid, answer, points) VALUES ({$qid},'{$answ3}',{$point3});";
    $query .= "INSERT INTO answer(qid, answer, points) VALUES ({$qid},'{$answ4}',{$point4});";

    if(mysqli_multi_query($conn,$query)) {
        echo "<br>Questions stored successfully!";
    } else {
        echo mysqli_errno($conn);
    }
} else {
    echo mysqli_errno($conn);
}

AUTO_INCREMENT
是否适合您的需要?@Jan不,不会。该表可以如下所示:pid=1QID=1,pid=1QID=2,pid=1QID=3,pid=2QID=1,pid=2QID=2。因此,它不起作用。这似乎是一个相似的复制品
CREATE TABLE `project` (
`pid` INT(11) NOT NULL AUTO_INCREMENT,
`project_name` VARCHAR(45) NULL DEFAULT NULL,
PRIMARY KEY (`pid`))
ENGINE = MyISAM
DEFAULT CHARACTER SET = utf8;

CREATE TABLE `question` (
 `qid` INT(11) NOT NULL AUTO_INCREMENT,
 `pid` INT(11) NULL DEFAULT NULL,
 `question` VARCHAR(60) NULL DEFAULT NULL,
 `question_link` VARCHAR(300) NULL DEFAULT NULL,
PRIMARY KEY (`qid`))
ENGINE = MyISAM
DEFAULT CHARACTER SET = utf8;

CREATE TABLE `answer` (
 `aid` INT(11) NOT NULL AUTO_INCREMENT,
 `qid` INT(11) NULL DEFAULT NULL,
 `answer` VARCHAR(100) NULL DEFAULT NULL,
 `points` INT(11) NULL DEFAULT NULL,
 PRIMARY KEY (`aid`))
ENGINE = MyISAM
DEFAULT CHARACTER SET = utf8;