質問

私はこの問題を抱えている私のユーザの小グループを代表して、この質問を求めています。

彼らが使用しているスクリプトが21 IDに到達したら、

、それは次のようなエラーが発生します:

  

SELECTは、より多くを調べます   MAX_JOIN_SIZE行。あなたのWHEREをチェック   そしてSET SQL_BIG_SELECTS = 1またはSETを使用します   SQL_MAX_JOIN_SIZE =#SELECTがある場合   大丈夫

私は、できるだけこの限り調査し、答えのようなものを発見した:<のhref =「http://dev.mysql.com/doc/refman/5.0/en/set-option.html」のrel =」をnoreferrer "> http://dev.mysql.com/doc/refman/5.0/en/set-option.html の

問題は、彼らがエラーを修正するために彼らのMySQLの設定を変更することはできませんので、彼らは、共有ホスティングであるということです。

彼らはこの問題を持っていないように私は私のスクリプトに記述できることはありますか?

これは、モジュールがロードされているに基づいてデータベースクエリを生成する関数です。     $ sqlを= 'アドレスとID、a.addressとしてa.id SELECT';

        $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();
役に立ちましたか?

解決

MAX_JOIN_SIZEはセーフティキャッチは、一般的に共有hostings上で使用されます。

それはあなたが誤ってサーバーをハングアップする、長いクエリを実行できなくなります。

このコマンドを発行します:

SET SQL_BIG_SELECTS = 1

クエリを実行する前に、値の多くを返すために知っています。

他のヒント

MySQLは、参加していない実際の予測されるレコードの背中のデカルト積を計算するときMAX_JOIN_SIZEがヒットします。あなたが別の大規模なテーブルに大量のテーブルを結合している場合ので、これは這い上がるでしょう。それは本当に大だ場合の可能なテーブルがヒットダウン削り取っする索引とビューを使用します。

の詳細はこちらをご覧ください: MySQLの - SQL_BIG_SELECTSする

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top