Empecemos por el punto de que SQL es tema de Bases de Datos (es otro foro) y NO de PHP.
PHP no entiende SQL y la base de datos no entiende ni interpreta PHP. Son entornos de existencia diferentes.
Habiendo aclarado eso, tu problema es de manual básico, pero tienes que al menos estudiar un poco de SQL. Encontrarás la respuesta en cualquier tutorial elemental para principiantes.
El fallo se produce porque en lugar de recibir del formulario el ID de la categoria, lo estás tomando de su
descripcion, pero luego intentas compararlo contra un campo que e numérico. Además ni siquiera has tomado la precaución de poner el contenido recibido entre apostrofos dentro del SQL, como para que MySQL lo interprete como cadena de texto (no devolvería datos, pero tampoco dispararía un error).
Entonces lo que la base de datos está recibiendo como consulta es esto:
Código SQL:
Ver originalSELECT * FROM productos WHERE idcategorias=Sillas
Enb esa query, "Sillas" NO ES una cadena de texto. Si lo fuese debería estár encerrada entre apostrofos:
Código SQL:
Ver originalSELECT * FROM productos WHERE idcategorias='Sillas'
Como no le pusiste los apostrofos, MySQL lo intenta interpretar como
nombre de una columna de la tabla, y como tal no existe.
Ahora bien, hay dos formas de resolver la consulta: CON y SIN JOIN, pero te recomiendo verla CON, dado que el JOIN es la clausula más usada de las consultas. Siempre necesitarás aprenderla
Código SQL:
Ver originalSELECT P.*
FROM productos P INNER JOIN categoria C ON P.idcategorias = C.idcategorias
WHERE c.descripcioncateg = 'Sillas'
en PHP:
Código PHP:
Ver original$categoria = $_GET['idcategorias'];
$sql = "SELECT P.*
FROM productos P INNER JOIN categoria C ON P.idcategorias = C.idcategorias
WHERE c.descripcioncateg = '$categoria'";
o con una escritura mas prolija y legible:
Código PHP:
Ver original$categoria = $_GET['idcategorias'];
// Hacer esto siempre ayuda a que el código sea mas LEGIBLE...
$sql = "SELECT P.* ";
$sql .= " FROM productos P INNER JOIN categoria C ON P.idcategorias = C.idcategorias";
$sql .= " WHERE c.descripcioncateg = '$categoria'";
// Es un MAL habito poner la query directamente en la llamada a la base.
// Evita que puedas hacer buenos debuggeos para resolver problemas