Pregunta

Hago esta pregunta en nombre de un pequeño grupo de mis usuarios que tienen este problema.

Una vez que el script que están usando llega al ID número 21, genera el siguiente error:

La selección examinaría más que las filas Max_Join_Size;revisa tu DÓNDE y use SET SQL_BIG_SELECTS=1 o SET SQL_MAX_JOIN_SIZE=# si SELECT es Bien

He investigado esto tanto como sea posible y encontré una especie de respuesta: http://dev.mysql.com/doc/refman/5.0/en/set-option.html

El problema es que están en alojamiento compartido, por lo que no pueden cambiar la configuración de MySQL para corregir los errores.

¿Hay algo que pueda escribir en mi script para que no tengan este problema?

Esta es la función que genera la consulta de la base de datos en función de qué módulos están cargados:$sql = 'SELECCIONAR un.id como id, una.dirección como dirección';

        $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();
¿Fue útil?

Solución

MAX_JOIN_SIZE es un cierre de seguridad utilizado comúnmente en los hostings compartidos.

No deja accidentalmente ejecutar consultas largas que cuelguen el servidor.

El tema de este comando:

SET SQL_BIG_SELECTS = 1

antes de ejecutar la consulta que sabe volver un montón de valores.

Otros consejos

El MAX_JOIN_SIZE es golpeado cuando MySQL calcula el producto cartesiano de una unión, no los registros reales esperados espalda. Por lo tanto, si se está uniendo a una enorme mesa a otra mesa masiva, esto va a arrastrarse para arriba. Use índices y vistas para recortar la tabla golpea posible si es realmente tan grande.

Ver más aquí: MySQL - SQL_BIG_SELECTS

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top