Cita: El usuario debe seleccionar de qué día a qué día realizar su consulta. Si son menos de 7 días entonces en otro formulario me tiene que arrojar los resultados de la consulta del primer día al sexto día, una columna por día.
Esto lo resuelves en el PHP, y creas una sentencia específica para ello. El encolumnado lo deberías resolver también en PHP, porque de lo contrario lo único que lograrás será complicarte la vida con SQL.
MySQL no cuenta con cláusula PIVOT para invertir una tabla.
Cita: Pero si son 7 días o más, entonces tengo que mostrar los resultados por número de semana, es decir, que me indique cuántos datos hay de la semana tal a la semana tal.
¿Datos o días?
Si son datos, sólo tienes que agrupar los resultados por el número de semana de la fecha
Si son días y luego separada la tabla por semanas, lo más simple es:
el CURDATE en este caso reemplaza una u otra fecha, e incluso si quieres acumulados por día, simplemente tienes que luego, en la consulta final, agrupar por fecha
Tip:
Observando tu consulta, me parece que es innecesariamente compleja y que podría ser escrita de una forma más eficiente...
Habría que intentarlo.