일부 복잡한 데이터를 mysql 데이터베이스에 삽입하려고하지만 구현 성능에 문제가있다. 나는 내가 데이터베이스에 삽입 할 데이터의 전체 무리를받을복잡한 데이터를 효율적으로 삽입 mysql
users columns[userid, name,...]
questions columns[questionid, userid, questiontext]
answers columns[answerid, questionid, answertext]
내 데이터베이스에 3 개 테이블을 정의이를 위해
user1
question1_1
answer1_1_1
answer1_1_2
answer1_1_3
...
question1_2
answer1_2_1
answer1_2_2
...
...
user 2
...
:처럼 내 데이터 보인다. 테이블이 연결되어 있기 때문에 사용자를 삽입하고 ID를 검색하여 질문에 VALUES를 사용하는 구현이 있습니다. 작동하지만 분리 된 수 때문에 최대 실행 시간이 30 초를 초과했습니다. mysql insert 문.
내 현재 코드는 다음과 같습니다
나는 이전 삽입의 ID가 다음 삽입 문에 사용되는 주어진 하나의 큰 statementm에 별도의 삽입 문을 결합 할 수있는 방법for ($i=0; $i<sizeof($users); $i++)
{
$user = $users[$i];
$sqlstr = "INSERT INTO users (username) VALUES ('".$users[$i]->id."')";
mysql_query($sqlstr);
$userid = mysql_insert_id();
for ($j=0; $j<sizeof($user->question); $j++)
{
$question = $user->question[$j];
$sqlstr = "INSERT INTO question (userid,creator,date) VALUES (".$userid.",'".$question->creator."','".$question->date."')";
mysql_query($sqlstr);
$questionid = mysql_insert_id();
$rows = array();
$sqlstr = "INSERT INTO answers (questionid,name,value) VALUES ";
for ($k=0; $k<sizeof($question->answers); $k++)
{
$rows[] = "('".$questionid."','".$question->answers[$k]->name."','".$question->answers[$k]->value."')";
}
$sqlstr = $sqlstr.implode(',',$rows);
mysql_query($sqlstr);
}
}
? LAST_INSERT_ID() 실험했지만 예상대로 작동하지 않습니다. 그 테이블의 마지막 ID를 참조하는 것 같습니다.
아니면 다른 해결책이 있습니까?
'LAST_INSERT_ID()'는 삽입 된 테이블에 관계없이 삽입 된 마지막 행의 ID를 반환해야합니다. 문제가있을 경우 잘못된 순서로 진술을 작성한 것입니다. 단일 문 (AFAIK)에서 여러 테이블에 삽입 할 수는 없지만 MySQL [UDF] (http://dev.mysql.com/doc/refman/5.1/en/adding-udf.html)을 다음과 같이 작성할 수 있습니다. 해. 매우 오래 실행되는 PHP 스크립트를 가지고 있다면'set_time_limit (0);'을 잊지 마라. – DaveRandom
질문에 현재 PHP 코드를 추가하십시오. – nnichols
@DaveRandom 당신 말이 맞아요. 나는 LAST_INSERT_ID로 실수를했지만, 코드를 최적화하는데는 여전히 쓸모가 없다. @nnichols 현재 저속 코드를 추가했습니다 – Tin