El problema que no me dejaba enviar noticias
Si os fijai en la fecha del anterior post y este, podréis comprobar que la web ha estado en un estado de largo letargo. El motivo, un problema técnico que me impedía ver los posts y acceder a su edición desde el panel de administración. Esto, unido al poco tiempo que he tenido para intentar solventar el problema me ha alejado más de lo deseado del mantenimiento de los contenidos de mi bitácora.
Como hay mucha más gente a la que le ha ocurrido, como he podido comprobar en google y nadie parece haberse dado cuenta de lo que ocurre (o yo no he encontrado la solución, entre otras cosas porque soy muy torpe para buscar en google), os documento un poco el problema y como se solventa. Todo comenzó cuando actualicé a MySQL 5.x. Cuando quería acceder a la lista de contenidos en mi Mambo Server (este fallo alcanza a varias versiones), me aparecía el siguiente error:
Error: DB function failed with error number 1054
Unknown column ‘c.access’ in ‘on clause’ SQL=SELECT c.*, g.name AS
groupname, cc.name, u.name AS editor, f.content_id AS frontpage FROM
mos_content AS c, mos_categories AS cc, mos_sections AS s LEFT JOIN
mos_groups AS g ON g.id = c.access LEFT JOIN mos_users AS u ON u.id =
c.checked_out LEFT JOIN mos_content_frontpage AS f ON f.content_id =
c.id WHERE c.state >= 0 AND c.catid=cc.id AND cc.section=s.id AND
s.scope=’content’ AND c.sectionid=’7′ ORDER BY catid, ordering LIMIT
0,10
Parece que las nuevas reglas de MySql 5 requieren que la tabla referenciada esté inmediatamente antes del ‘LEFT JOIN’. Así que si buscamos en administrator/content.php el siguiente código:
$database->setQuery( «SELECT c.*, g.name AS groupname, cc.name, u.name AS editor, f.content_id AS frontpage»
. «nFROM mos_content AS c, mos_categories AS cc, mos_sections AS s»
. «nLEFT JOIN mos_groups AS g ON g.id = c.access»
. «nLEFT JOIN mos_users AS u ON u.id = c.checked_out»
. «nLEFT JOIN mos_content_frontpage AS f ON f.content_id = c.id»
. (count( $where ) ? «nWHERE » . implode( ‘ AND ‘, $where ) : «»)
. «nORDER BY catid, ordering»
. «nLIMIT $pageNav->limitstart,$pageNav->limit»
);
vemos que mos_content AS c está justo destrás del ‘FROM’ y debería estar justo antes del ‘LEFT JOIN’, así que el código debería quedar de la siguiente forma:
$database->setQuery( «SELECT c.*, g.name AS groupname, cc.name, u.name AS editor, f.content_id AS frontpage»
. «nFROM mos_categories AS cc, mos_sections AS s, mos_content AS c»
. «nLEFT JOIN mos_groups AS g ON g.id = c.access»
. «nLEFT JOIN mos_users AS u ON u.id = c.checked_out»
. «nLEFT JOIN mos_content_frontpage AS f ON f.content_id = c.id»
. (count( $where ) ? «nWHERE » . implode( ‘ AND ‘, $where ) : «»)
. «nORDER BY catid, ordering»
. «nLIMIT $pageNav->limitstart,$pageNav->limit»
);
Espero que os sirva 😉
Publicado en old.tapiasbravo.com el 5 de abril de 2006. Recuperado de la Wayback Machine en 2026.