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

时间:2015-12-29 15:12:21

标签: php mysql sql

因为我有几个"项目"每个应该包含很多问题,我有一个问题页面,我填写视频链接,四个答案和四个下拉列表,用户可以为每个答案设置点数。

但是,在数据库中我有两个表。

一个表,"问题",列:pid(项目ID),qid(问题ID)和问题链接。另一个表" answer_det"有以下列:pid,qid,aid,answer和points。

当我填写并执行我的问题页面时,我已经做了所以每个答案都有一个id。在表格#34; answer_det"中,正在设置Pid,Aid,answer和points。这是它的样子: enter image description here

"问题"当我插入Pid = 1的第一个项目的第一个问题时的表格:

enter image description here

我现在要做的是设置qid(question-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" -table之外,我想第一个项目的第一个问题(pid = 1的那个)也有qid = 1以及我填写的链接。 pid = 1的项目的第二个问题应该是qid = 2。如果我为新项目添加第一个问题,那么它应该是pid = 2和qid = 1。然后,如果我想对第一个问题提出第三个问题,它应该看到pid = 1有2个问题(qid = 2)并且加1是因此第三个问题看起来像pid = 1和qid = 3。

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



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

if(mysqli_connect_errno())
{
	echo mysqli_connect_error();
}

$pid5 = $_POST['pid4'];

$video = $_POST['videolink1'];
    
$aid1 = $_POST['a1'];
$aid2 = $_POST['a2'];
$aid3 = $_POST['a3'];
$aid4 = $_POST['a4'];    
    
$answ1 = $_POST['ans1'];
$answ2 = $_POST['ans2'];
$answ3 = $_POST['ans3'];
$answ4 = $_POST['ans4'];
    
$point1 = $_POST['pointset1'];  
$point2 = $_POST['pointset2'];  
$point3 = $_POST['pointset3'];  
$point4 = $_POST['pointset4'];

$que = "INSERT INTO answer_det VALUES('$pid5','','$aid1','$answ1','$point1');";
$que .= "INSERT INTO answer_det VALUES('$pid5','','$aid2','$answ2','$point2');";
$que .= "INSERT INTO answer_det VALUES('$pid5','','$aid3','$answ3','$point3');";
$que .= "INSERT INTO answer_det VALUES('$pid5','','$aid4','$answ4','$point4');";
    
$que .= "INSERT INTO question VALUES('$pid5','','$video');";

$run = mysqli_multi_query($mysqli,$que);
if($run)
{
	echo "<br>Information stored successfully";

}
else
{
	echo mysql_error();
}


?>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:1)

我有一个答案和建议:]

答案:

如果你想在每个question_det中添加qid,你需要在插入 question_det 之前插入问题并使用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     |

使用完全不同的列作为PRIMARY KEY是不好的做法...例如,你的表格问题PRIMARY_KEY应该是 qid 而不是 pid ;对于question_det表同样的问题,PRIMARY_KEY应该援助而不是 pid ,并且两者都应该设置为AUTO_INCREMENT所以每次插入新问题或者question_det时它会自动增加qid和援助栏

你应该有这样的东西:

//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应设置为AUTO_INCREMENT

这就是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);
}

数据库SQL结构也应该是这样的:

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;