이 문제가있는 소수의 사용자를 대신하여이 질문을하고 있습니다. 나는 가능한이 많이 연구되고 응답의 무언가 발견MySQL MAX_JOIN_SIZE 오류
The SELECT would examine more than MAX_JOIN_SIZE rows; check your WHERE and use SET SQL_BIG_SELECTS=1 or SET SQL_MAX_JOIN_SIZE=# if the SELECT is okay
: http://dev.mysql.com/doc/refman/5.0/en/set-option.html
을 그들이 사용하는 스크립트가 21 ID에 도달하면
, 그것은 다음과 같은 오류가 발생합니다 문제는 공유 호스팅에 있기 때문에 오류를 수정하기 위해 MySQL 설정을 변경할 수 없다는 것입니다.
스크립트에이 문제가 없도록 쓸 수있는 것이 있습니까?
로드 된 모듈을 기반으로 데이터베이스 쿼리를 생성하는 함수입니다. $ sql = 'id로 a.id를 선택하고 주소로 a.address'; MySQL은 A, 가입하지 실제 예상 기록을 다시의 직교 제품을 계산할 때 MAX_JOIN_SIZE은 당한다
$query = 'SELECT'
. ' name AS module_name'
. ', databasename AS module_database'
. ', pregmatch AS module_pregmatch'
. ', pregmatch2 AS module_pregmatch2'
. ', html AS module_html'
. ', sqlselect AS database_sqlselect'
. ', sqljoin AS database_sqljoin'
. ', sqlupdatewithvalue AS database_sqlupdatewithvalue'
. ', sqlupdatenovalue AS database_sqlupdatenovalue'
. ' FROM #__aqsgmeta_modules'
. ' WHERE enabled = 1'
. ' ORDER BY id';
$db->setQuery($query);
$results = $db->loadObjectList();
if (count($results) != 0) {
foreach ($results as $result) {
$sqlselect .= ', ';
$sqlselect .= $result->database_sqlselect;
$sqljoin .= ' ';
$result->database_sqljoin = preg_replace('/\{DATABASENAME\}/Ui', $result->module_database, $result->database_sqljoin);
if (!(preg_match("/" . $result->database_sqljoin . "/Ui", $sqljoin)))
$sqljoin .= $result->database_sqljoin;
}
}
if ($use_sh404sef)
$sqlselect .= ', g.oldurl AS sefurl';
$sql .= $sqlselect;
$sql .= ' FROM #__aqsgmeta_address AS a';
$sql .= $sqljoin;
if ($use_sh404sef)
$sql .= ' LEFT JOIN #__redirection AS g ON g.newurl = a.address';
$sql .=
//. ' WHERE a.id IN (' . $cids . ')'
' WHERE a.id = ' . $id
. ' ORDER BY a.address asc,a.id '
;
$db->setQuery($sql);
$rows = $db->loadObjectList();
쿼리가 최적화되어 있는지, 즉 더 적은 중간 결과 집합으로 동일한 결과를 얻을 수있는 방법이 없다고 확신합니까? – VolkerK