Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Problema en consulta con Dreamweaver

Estas en el tema de Problema en consulta con Dreamweaver en el foro de PHP en Foros del Web. Hola, de nuevo dando la matraca, pero me volví a atascar: Estoy montando con Dreamweaver una página php en la que tengo un juego de ...
  #1 (permalink)  
Antiguo 09/05/2015, 12:38
Avatar de MariaLSS  
Fecha de Ingreso: abril-2015
Ubicación: Madrid
Mensajes: 53
Antigüedad: 9 años, 7 meses
Puntos: 2
Problema en consulta con Dreamweaver

Hola, de nuevo dando la matraca, pero me volví a atascar:

Estoy montando con Dreamweaver una página php en la que tengo un juego de registros. La idea es que en la página se muestren resultados a una consulta que tiene dos condiciones:
  • La primera es que el estatus de ese registro sea "1" (documento previamente validado por el director del centro)
  • La segunda es relativa a un período de tiempo. En este caso el criterio es que la información permanezca disponible para un usuario que tiene que validar documentos durante un periodo de tiempo de 6 meses

Mi consulta inicial es ésta:
Código PHP:
"SELECT * FROM docs_subidos WHERE docs_subidos.estatus = 1"
Y funciona a las mil maravillas. Sin embargo, cuando le añado el "AND" para establecer la segunda condición de la consulta se va a la porra y no funciona.

Éste es mi código:

Código PHP:
"SELECT * FROM docs_subidos WHERE docs_subidos.estatus = 1 
AND docs_subidos.fecha BETWEEN DATE_SUB(NOW(), INTERVAL 6 MONTH) AND NOW() "

Si alguien puede iluminarme, se lo agradecería infinitamente.
  #2 (permalink)  
Antiguo 09/05/2015, 13:12
Avatar de enlinea777  
Fecha de Ingreso: mayo-2008
Ubicación: frente al pc
Mensajes: 1.830
Antigüedad: 16 años, 5 meses
Puntos: 127
Respuesta: Problema en consulta con Dreamweaver

solucion
consultas anidadas.
  #3 (permalink)  
Antiguo 10/05/2015, 01:15
Avatar de MariaLSS  
Fecha de Ingreso: abril-2015
Ubicación: Madrid
Mensajes: 53
Antigüedad: 9 años, 7 meses
Puntos: 2
Respuesta: Problema en consulta con Dreamweaver

Gracias enlinea777.
Voy a investigar por ese lado.

Pero se me está ocurriendo otra solución que podría pasar por crear en la tabla docs_subidos una nueva columna "fecha_2" y a ésta darle con DATE ADD el valor de "fecha" + 6 meses... No sé aún. Perdonad que no esboce nada más, pero de momento es una idea con la que me acabo de despertar. Aún estoy un poco dormida.

Saludos
  #4 (permalink)  
Antiguo 11/05/2015, 04:41
Avatar de MariaLSS  
Fecha de Ingreso: abril-2015
Ubicación: Madrid
Mensajes: 53
Antigüedad: 9 años, 7 meses
Puntos: 2
Respuesta: Problema en consulta con Dreamweaver

Hola de nuevo... Encontré la forma de incluir un AND en mi consulta elaborada en Dreamweaver... pero hay unos datos que necesito incluir en mi tabla que no sé como solucionar.

En este primer post, voy a pegar mi tabla:

Código MySQL:
Ver original
  1. CREATE TABLE `docs_subidos` (
  2.   `doc_id` int(5) NOT NULL,
  3.   `doc_tipo` enum('TC','CE','RR','') COLLATE utf8_spanish_ci NOT NULL DEFAULT 'TC',
  4.   `us_nombre` varchar(30) COLLATE utf8_spanish_ci NOT NULL,
  5.   `nombreorig_doc` varchar(254) COLLATE utf8_spanish_ci NOT NULL,
  6.   `doc_asunto` varchar(254) COLLATE utf8_spanish_ci NOT NULL,
  7.   `fecha` date NOT NULL,
  8.   `fecha_2` date NOT NULL,
  9.   `fecha_3` date NOT NULL,
  10.   `estatus` tinyint(1) NOT NULL DEFAULT '0'
  11. ) ENGINE=InnoDB AUTO_INCREMENT=62 DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;
  #5 (permalink)  
Antiguo 11/05/2015, 04:51
Avatar de MariaLSS  
Fecha de Ingreso: abril-2015
Ubicación: Madrid
Mensajes: 53
Antigüedad: 9 años, 7 meses
Puntos: 2
Respuesta: Problema en consulta con Dreamweaver

El valor de "fecha_2" se actualiza a CURRENT_DATE cuando el director del centro modifica el registro -en el formulario previsto a tal fin- cambiando el valor inicial de "0" de un grupo de opción a "1". A continuación el código que lo hace posible:

Código MySQL:
Ver original
  1. UPDATE docs_subidos
  2. SET fecha_2 = CURRENT_DATE
  3. WHERE estatus = '1';

Pero ahora viene el problema del "AND" para mi query... y es que necesito dar valor a "fecha_3" sumando a ese CURRENT_DATE (el del día en que el director valida esa información) un periodo de 180 días (que es el tiempo del que el supervisor dispone para realizar su tarea) y que esto suceda únicamente cuando el estatus es = 1 y hay una fecha real en "fecha_2"...

¿Me pueden ayudar, por favor?
Un millón de gracias
  #6 (permalink)  
Antiguo 11/05/2015, 04:55
Avatar de MariaLSS  
Fecha de Ingreso: abril-2015
Ubicación: Madrid
Mensajes: 53
Antigüedad: 9 años, 7 meses
Puntos: 2
Respuesta: Problema en consulta con Dreamweaver

Y respecto a la forma de añadir el AND a la consulta en Dreamweaver, encontré este estupendo tutorial sobre los juegos de registros anidados de los que hablaba enlinea777

[URL="http://http://tupale.org/juegos-de-registros-relacionales-y-anidados-con-dreamweaver.html"]http://http://tupale.org/juegos-de-registros-relacionales-y-anidados-con-dreamweaver.html[/URL]
  #7 (permalink)  
Antiguo 11/05/2015, 07:03
Avatar de enlinea777  
Fecha de Ingreso: mayo-2008
Ubicación: frente al pc
Mensajes: 1.830
Antigüedad: 16 años, 5 meses
Puntos: 127
Respuesta: Problema en consulta con Dreamweaver

y lo solucionaste?
  #8 (permalink)  
Antiguo 11/05/2015, 07:20
Avatar de MariaLSS  
Fecha de Ingreso: abril-2015
Ubicación: Madrid
Mensajes: 53
Antigüedad: 9 años, 7 meses
Puntos: 2
Respuesta: Problema en consulta con Dreamweaver

Hola de nuevo, enlinea777 y gracias por responder.

No, no lo he solucionado: he visto cómo se puede poner un AND... pero no logro cómo crear el método para implementarlo básicamente porque aún no se cómo dar en MySQL valor a fecha_3; es decir, trasladar esta idea a código: fecha_3 = fecha_2+6 meses.

¿Tú sabrías cómo hacerlo?

Gracias de nuevo
  #9 (permalink)  
Antiguo 11/05/2015, 08:46
Avatar de enlinea777  
Fecha de Ingreso: mayo-2008
Ubicación: frente al pc
Mensajes: 1.830
Antigüedad: 16 años, 5 meses
Puntos: 127
Respuesta: Problema en consulta con Dreamweaver

Pues al pricipio crei que el problema eran los valores y las consultas anidadas hasta que colocaste la estructura de tu tabla.

Código SQL:
Ver original
  1. SELECT * FROM docs_subidos WHERE
  2. docs_subidos.estatus = 1
  3. AND docs_subidos.fecha BETWEEN (SUBSTRING(DATE_SUB(NOW(), INTERVAL 6 MONTH),1,10)) AND (SUBSTRING(NOW(),1,10) );

eso te arregla la consulta.
el campo fecha es date y estas buscando un date time que corresponde al now() en anbos casos, asi que deberias cortar el resultado SUBSTRING

o bien puedes usar DATE_FORMAT.

Código SQL:
Ver original
  1. SELECT * FROM docs_subidos WHERE
  2. docs_subidos.estatus = 1
  3. AND docs_subidos.fecha BETWEEN (DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 6 MONTH),'%Y-%m-%d')) AND (DATE_FORMAT(NOW(),'%Y-%m-%d') );

He probado las 2 obciones y la mas rapida es SUBSTRING
quien lo pensaria siendo que DATE_FORMAT fue creada para manejas fechas.

Saludos
  #10 (permalink)  
Antiguo 11/05/2015, 08:54
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Problema en consulta con Dreamweaver

Cita:
quien lo pensaria siendo que DATE_FORMAT fue creada para manejas fechas.
En realidad DATE_FORMAT() en MySQL tiene por objeto convertir una fecha en una cadena de texto con un determinado formato, pero no es el modo adecuado de manejar los cálculos de fechas... Para eso hay muchas otras funciones que sí son específicas.

Puntualmente, en tu caso, el DATE_FORMAT es superfluo y sólo le agrega ineficiencia. Para tomar las fechas, sin horas, loque debes hacer es usar CURDATE():
Código MySQL:
Ver original
  1. SELECT * FROM docs_subidos WHERE
  2. docs_subidos.estatus = 1
  3. AND docs_subidos.fecha BETWEEN DATE_SUB(CURDATE(), INTERVAL 6 MONTH) AND CURDATE());
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 11/05/2015, 09:33
Avatar de enlinea777  
Fecha de Ingreso: mayo-2008
Ubicación: frente al pc
Mensajes: 1.830
Antigüedad: 16 años, 5 meses
Puntos: 127
Respuesta: Problema en consulta con Dreamweaver

que raro, no encuentro la optimizacion en ninguna de las 3 formas de hacerlo lo mas que cambian son 5 mili segundos pero no son fijos son al azar.
  #12 (permalink)  
Antiguo 11/05/2015, 11:56
Avatar de MariaLSS  
Fecha de Ingreso: abril-2015
Ubicación: Madrid
Mensajes: 53
Antigüedad: 9 años, 7 meses
Puntos: 2
Respuesta: Problema en consulta con Dreamweaver

@enlinea777 y @gnzsoloyo: Muchísimas gracias por vuestras respuestas y por vuestras aportaciones. Lo probaré a la noche y mañana en la mañana os diré algo, que ahora he de salir (hay eco en el interior de mi nevera así que debo comprar algunas cositas)

Un saludo

Última edición por MariaLSS; 11/05/2015 a las 23:36
  #13 (permalink)  
Antiguo 11/05/2015, 23:57
Avatar de MariaLSS  
Fecha de Ingreso: abril-2015
Ubicación: Madrid
Mensajes: 53
Antigüedad: 9 años, 7 meses
Puntos: 2
Respuesta: Problema en consulta con Dreamweaver

Hola de nuevo:
Empiezo por la solución de @gnzsoloyo. En primer lugar no es el valor de docs_subidos.fecha lo que necesito utilizar para calcular el plazo de los 6 meses: "fecha" hace referencia al día en que el usuario ha subido el documento. El día en que el director visa el documento (y da clic en el botón de radio correspondiente en un formulario previsto a tal fin) es fecha_2, cuyo valor doy a la columna en phpMyAdmin mediante:

Código SQL:
Ver original
  1. UPDATE docs_subidos
  2. SET fecha_2 = CURRENT_DATE
  3. WHERE estatus = '1';

En cualquier caso, actualicé la consulta que me indicasteis incluyendo "fecha_2" en lugar de "fecha" así:

Código SQL:
Ver original
  1. SELECT * FROM docs_subidos WHERE estatus = 1
  2. AND docs_subidos.fecha_2 BETWEEN DATE_SUB(CURDATE(), INTERVAL 6 MONTH) AND CURDATE());

Y la pegué en la de código de Dreamweaver... pero me da este error:

Código:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') LIMIT 0, 15' at line 1
Y entiendo que el error tiene que ver con:

Código SQL:
Ver original
  1. AND docs_subidos.fecha_2 BETWEEN DATE_SUB(CURDATE(), INTERVAL 6 MONTH) AND CURDATE()

No tengo ni idea de qué pueda tratarse...
  #14 (permalink)  
Antiguo 12/05/2015, 01:31
Avatar de MariaLSS  
Fecha de Ingreso: abril-2015
Ubicación: Madrid
Mensajes: 53
Antigüedad: 9 años, 7 meses
Puntos: 2
Respuesta: Problema en consulta con Dreamweaver

Ufff... bueno, ahora que mandé a los chicos al cole, puedo continuar.

@enlinea777, he probado con tu código y éste no me da errores. Digo lo mismo que en el caso de @gnzsoloyo: modifiqué "fecha" a "fecha_2" por las mismas razones: fecha_2 es la que abre el periodo de 6 meses y es lo que me pidieron. También he cambiado el intervalo de tiempo para realizar una prueba y, ya mañana, saber si funciona o no. Así:

Código MySQL:
Ver original
  1. SELECT * FROM docs_subidos WHERE estatus = 1
  2. AND docs_subidos.fecha_2 BETWEEN (SUBSTRING(DATE_SUB(NOW(), INTERVAL 1 DAY),1,10)) AND (SUBSTRING(NOW(),1,10) );

Cuando pruebo el documento en el navegador, no da errores y necesito que transcurra el tiempo para ver si funciona.

El caso es que no entiendo el SUBSTRING, porque estoy trabajando con formato DATE. Cuando te refieres a:

Cita:
el campo fecha es date y estas buscando un date time que corresponde al now() en anbos casos, asi que deberias cortar el resultado SUBSTRING
¿quieres decir que haga esto? (perdón si cometo errores con la sintaxis, estoy aprendiendo)

Código MySQL:
Ver original
  1. SELECT * FROM docs_subidos WHERE estatus = 1
  2. AND docs_subidos.fecha_2 BETWEEN (DATE_SUB(NOW(), INTERVAL 1 DAY),1,10)) AND (NOW(),1,10);

Gracias, una vez más @enlinea777 y @gnzsoloyo por vuestra amabilidad y respuestas.
  #15 (permalink)  
Antiguo 12/05/2015, 07:47
Avatar de enlinea777  
Fecha de Ingreso: mayo-2008
Ubicación: frente al pc
Mensajes: 1.830
Antigüedad: 16 años, 5 meses
Puntos: 127
Respuesta: Problema en consulta con Dreamweaver

el formatro que debuelve now() es fecha y hora
y tu campo es date == solamente la hora

por eso el sub string que debuelve solo los 10 promeros caracteres osea la fecha.

ahora es mas facil usar: CURDATE() pues esta debuelve la fecha sin la hora

Código SQL:
Ver original
  1. SELECT * FROM docs_subidos WHERE
  2. docs_subidos.estatus = 1
  3. AND docs_subidos.fecha BETWEEN ( DATE_SUB(CURDATE(), INTERVAL 6 MONTH) ) AND (CURDATE());

asi que esa seria la solucion.

ahora para probar no creo que debas esperar solo basta com probar en una tabla copiar algunos datos y hacer pruebas.
  #16 (permalink)  
Antiguo 12/05/2015, 23:50
Avatar de MariaLSS  
Fecha de Ingreso: abril-2015
Ubicación: Madrid
Mensajes: 53
Antigüedad: 9 años, 7 meses
Puntos: 2
Respuesta: Problema en consulta con Dreamweaver

Gracias de nuevo @enlinea777.

Voy a probar con el código que compartes.

En cualquier caso, quiero también estudiar la posibilidad de dar valor a fecha_3 (que es la columna de mi tabla en la que tenía previsto establecer el plazo de 6 meses a contar después de introducir la data en fecha_2). Eso simplificaría mucho la consulta que podría ser (perdón por la sintaxis, pero en este momento espero sólo explicar mi idea):

Código MySQL:
Ver original
  1. SELECT * FROM docs_subidos WHERE
  2. docs_subidos.estatus = 1
  3. AND CURDATE() < docs_subidos.fecha_3;

¿Estaría bien escrita la query?

Un saludo y gracias de nuevo.
  #17 (permalink)  
Antiguo 13/05/2015, 03:50
Avatar de MariaLSS  
Fecha de Ingreso: abril-2015
Ubicación: Madrid
Mensajes: 53
Antigüedad: 9 años, 7 meses
Puntos: 2
Respuesta: Problema en consulta con Dreamweaver

Hola una vez más:

Entro para comentar que ya di valor a mi columna fecha_3. Lo hice en phpMyAdmin editando el siguiente SQL:

Código SQL:
Ver original
  1. UPDATE docs_subidos
  2. SET fecha_3 = DATE_ADD(fecha_2, INTERVAL 6 MONTH)
  3. WHERE fecha_2 <> '0000-00-00';

Lo explico, fecha_2 solo toma el valor de CURRENT_DATE cuando en el formulario previsto a tal fin, el director clica sobre el botón de radio que cambia el valor "0" inicial del campo estatus a "1".

Yo quiero dar valor a fecha_3 sólo cuando el valor de fecha_2 es distinto del valor predefinido de ese campo (0000-00-00).

La verdad es que necesito el valor de fecha_3 para insertarlo en la lista de resultados del supervisor junto al nombre del documento enlazado y disponible durante ese plazo de tiempo.

Ahora voy a probar con la consulta en mi php...

Seguiré comentando por aquí por si le puede servir de ayuda a alguien

Ciao
  #18 (permalink)  
Antiguo 13/05/2015, 03:55
Avatar de MariaLSS  
Fecha de Ingreso: abril-2015
Ubicación: Madrid
Mensajes: 53
Antigüedad: 9 años, 7 meses
Puntos: 2
Respuesta: Problema en consulta con Dreamweaver

¡¡Y funciona!!

Qué contenta estoy.
La consulta es correcta:

Código SQL:
Ver original
  1. SELECT * FROM docs_subidos WHERE
  2. docs_subidos.estatus = 1
  3. AND CURDATE() < docs_subidos.fecha_3;

Gracias una vez más a @enlinea777 y @gnzsoloyo por vuestras recomendaciones
  #19 (permalink)  
Antiguo 14/05/2015, 06:20
Avatar de enlinea777  
Fecha de Ingreso: mayo-2008
Ubicación: frente al pc
Mensajes: 1.830
Antigüedad: 16 años, 5 meses
Puntos: 127
Respuesta: Problema en consulta con Dreamweaver

Me alegra que allas llegado al resultado sin tanta vuelta.
cuando necesites alguna ayuda cuenta conmigo

Etiquetas: dreamweavercs6, mysql+consulta
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:52.