Vamos por partes.
1. Esta consulta:
Código sql:
Ver originalSELECT DISTINCT *
FROM mapas m
JOIN signaturasoriginales s ON s.mapaid=m.mapaid
JOIN materias mat ON mat.materiaid=m.materiaid
JOIN lugargeosec l ON l.mapaid = m.mapaid
JOIN autores a ON a.mapaid = m.mapaid
WHERE m.mapaid=s.mapaid AND
m.materiaid=mat.materiaid AND
m.mapaid=l.mapaid AND
m.mapaid=a.mapaid AND
m.lugargeografico LIKE '%'
OR l.lugar LIKE '%'
OR m.fecha LIKE '%'
OR mat.materia LIKE '%'
OR a.autor LIKE '%autor1';
es redundante e ineficiente. Esta haceiendo dos veces la misma relación en forma innecesaria.
Una sintaxis simplificada sería:
Código sql:
Ver originalSELECT DINSTINCT *
FROM mapas m
INNER JOIN signaturasoriginales s ON s.mapaid=m.mapaid
INNER JOIN materias mat ON mat.materiaid=m.materiaid
INNER JOIN lugargeosec l ON l.mapaid = m.mapaid
INNER JOIN autores a ON a.mapaid = m.mapaid
WHERE
m.lugargeografico LIKE '%'
OR l.lugar LIKE '%'
OR m.fecha LIKE '%'
OR mat.materia LIKE '%'
OR a.autor LIKE '%autor1';
Esta parte:
Cita: m.lugargeografico like '%'
OR l.lugar like '%'
OR m.fecha like '%'
OR mat.materia like '%'
no parece tener sentido. Porque lo que indica es que ponga los registros sea cual fuere el valor que esté allí, aunque para eso mismo está mal construida.
2. El problema que planteas:
Cita: Como puedo hacer la consulta para que si no meto valores en el formulario no me haga la consulta teniendo en cuenta esos valores.
no se puede resolver por la consulta. Eso lo tienes que definir en la aplicación, de modo de enviar dos consultas distintas según tengas o no valores de comparación. No hay otro modo.
En caso contrario, deberías resolverlo por medio de un strore procedure... que haría exactamente eso. Tiempo desperdiciado: Hazlo en la aplicación y será más sencillo.
La idea es que hagas un procedimiento que construya la sentencia incluyendo o no el WHERE, según vayas a comparar o no contra un valor obtenido, y recién entonces la envíes a ejecutar.
Finalmente, una sintaxis más limpia de lo que has puesto sería:
Código sql:
Ver originalSELECT DINSTINCT *
FROM mapas m
INNER JOIN signaturasoriginales s USING(mapaid)
INNER JOIN materias mat USING(mapaid)
INNER JOIN lugargeosec l USING(mapaid)
INNER JOIN autores a USING(mapaid)
WHERE
m.lugargeografico LIKE '%'
OR l.lugar LIKE '%'
OR m.fecha LIKE '%'
OR mat.materia LIKE '%'
OR a.autor LIKE '%autor1';