0

我有一个名为 的数据库表Student,列为id, name, ageid是主键,name不为空,age可以为空

我想在 php Zend 中实现以下内容: 如果值不同,则仅在 db 中添加重复的学生。nameage

在 function/action 内部addStudentAction,我正在调用 Student 模型的函数 -findStudent以实现要求:

public function findStudent($name)
{
    $result = null;

    $select = $this->select(Zend_Db_Table::SELECT_WITH_FROM_PART)
    ->setIntegrityCheck(false)
    ->where('student.name = ?', $name);

    //error_log($select->assemble());

    $result = $this->getAdapter()->fetchRow($select);

    return $result;
}

public function addStudentAction() {
    $data = $_POST;
    $studentModel = new Application_Model_Student;
    $result = $studentModel->findStudent($data['name']);

    if(!empty($result)) { 
        error_log("found student name in db, going to get age");

       //Check for age
       if( (!empty($result['age'] )) {
             if( $result['age'] != $data['age']) {
                  error_log("going to add student as new record");
                  return $this->insert($data);
             }
             else {
                  error_log("not adding new student record ");
             }
       }
    }
}

现在,可能有多个学生记录具有相同name但不同的age值。因此,在添加新学生时,我需要将所有记录的年龄(如果名称匹配)与传入的年龄值进行比较。

实现此要求的最佳方法是什么?任何帮助是极大的赞赏。

谢谢

4

2 回答 2

0

最简单的方法是在名称上创建一个复合唯一索引,然后是年龄字段。UNIQUE 允许多个 NULL 值,因此这不是问题。根据您的数据库大小和使用情况,这可能不是最优选的选项,在这种情况下,在 INSERT 之前对学生信息进行简单的 SELECT 以检查他/她是否已经在其中将是最佳解决方案。

让我知道是否需要详细说明。我很乐意给你举一些例子。

于 2012-07-10T01:30:58.733 回答
0

你如何用名字和年龄做一个新的 SELECT:

public function findStudentWithAge($name, $age =null)
{
    $result = null;

    $select = $this->select(Zend_Db_Table::SELECT_WITH_FROM_PART)
    ->setIntegrityCheck(false)
    ->where('student.name = ?', $name);
    if($age) $select->where('student.age = ?', $age);

    //error_log($select->assemble());

    $result = $this->getAdapter()->fetchRow($select);

    return $result;
}

现在在 addStudentAction 中:

public function addStudentAction() {
    $data = $_POST;
    $studentModel = new Application_Model_Student;
    $result = $studentModel->findStudent($data['name'], $data['age']);

    if(!empty($result)) { 
        error_log("found student with this age, cannot add the record");
    } else {
        $this->insert($data);
    }
}
于 2012-07-10T12:30:19.427 回答