Hola tento una tabla dentro de una bd llamada "centro" (donde hay un listado de centros de alumnos) y otra tabla llamada "visitacentro" donde hay una "fecha" (que en realidad es un texto donde pongo dd/mm/aaaa porque me he vuelto loco con las fechas y al final las introduzco tipo texto) y los diferentes "centros" centros visitados por fecha. Puede haber un centro no visitado que no estaría o un centro visitado varias veces.
Quisiera hacer una consulta donde me pusiese todos los centros de la tabla centro pero que fuese a visitacentro y buscara la última "fecha" de visita de ese centro.
¿Podría de algún modo transformar la fecha visita que tendrá siempre valor dd/mm/aaaa (pero que es texto) a formato fecha? ¿Esto se podría hacer de alguna forma en phpmyadmin?
¿Cómo podría decirle si un "centro" está varias veces en "visitacentro" ponme la fecha más alta (Es decir la más cercana a hoy).
A ver si me podeis orientar.
Podes hacer un UNION SELECT con un ORDER BY..
En cuanto a transformar hay formas si, tenes tanto CAST como CONVERT.
Desde phpMyAdmin lo vas a poder hacer, confeccionando previamente el SQL y ejecutandolo.
Si estás trabajando en mysql puedes hacer lo siguiente.
Convertir fecha tipo texto (varchar) a tipo fecha (date)
SELECT STR_TO_DATE(centro_fecha, '%d/%m/%Y') FROM visitacentro;
Suponiendo que el formato de la fecha tipo texto está como dd/mm/aaaa
Para obtener la fecha más reciente visitada en cada centro puedes hacerlo así.
SELECT centro_id, MAX(STR_TO_DATE(centro_fecha, '%d/%m/%Y')) FROM visitacentro GROUP BY centro_id;
Si quieres consultar campos de la tabla centro puedes hacerlo con JOIN pero yo te recomiendo Subquerys.
SELECT c.centro_id, c.centro_nombre, MAX(STR_TO_DATE(vc.centro_fecha, '%d/%m/%Y')) FROM centro AS c, visitacentro AS vc WHERE c.centro_id=vc.centro_id GROUP BY vc.centro_id;
Otra forma..
SELECT c.centro_id, c.centro_nombre, MAX(STR_TO_DATE(vc.centro_fecha, '%d/%m/%Y')) FROM centro AS c, visitacentro AS vc GROUP BY vc.centro_id;
Otra forma...
SELECT *
FROM centro AS c, visitacentro AS vc1
WHERE (STR_TO_DATE(vc1.centro_fecha, '%d/%m/%Y')) = (SELECT MAX(STR_TO_DATE(vc2.centro_fecha, '%d/%m/%Y'))
FROM visitacentro AS vc2
WHERE vc2.centro_id = vc1.centro_id) AND c.centro_id=vc1.centro_id;
Con inner join
SELECT c.centro_id, MAX(STR_TO_DATE(vc.centro_fecha, '%d/%m/%Y')) AS fecha FROM centro AS c INNER JOIN visitacentro AS vc ON c.centro_id=vc.centro_id GROUP BY vc.centro_id
Espero te sirva de ayuda.
Saludos.