Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

update co select

Estas en el tema de update co select en el foro de Bases de Datos General en Foros del Web. Hola: Tengo la siguiente consulta: $cam = "UPDATE temporal SET lunes = '' = ( ' SELECT id, turnos, lunes, count( turnos ) AS TRABAJAN ...
  #1 (permalink)  
Antiguo 22/05/2012, 12:20
 
Fecha de Ingreso: enero-2008
Mensajes: 303
Antigüedad: 16 años, 3 meses
Puntos: 0
update co select

Hola:

Tengo la siguiente consulta:


$cam = "UPDATE temporal SET lunes = '' = ( ' SELECT id, turnos, lunes, count( turnos ) AS TRABAJAN FROM temporal WHERE turnos= ".$turno." and lunes != '' AND lunes !=1 AND turnos != '' GROUP BY turnos' ) ";

Pero quiero que solo me cambie el dato cuando el contador TRABAJAN (count (turnos)) sobrepase un numero. Antes de consultar he buscado mucho y no encuentro.



He probado con el siguiente, pero no marcha..


$cam = "UPDATE temporal SET lunes = '' = ( ' SELECT id, turnos, lunes, count( turnos ) AS TRABAJAN FROM temporal WHERE turnos= ".$turno." and lunes != '' AND lunes !=1 AND turnos != '' AND TRABAJAN>X GROUP BY turnos' ) ";


Por favor echadme un calbe.
Gracias y un saludo
  #2 (permalink)  
Antiguo 22/05/2012, 14:15
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: update co select

Partamos de que la primera consulta está muy mal escrita:
Código MySQL:
Ver original
  1. UPDATE temporal
  2. SET lunes = '' = ( ' SELECT id, turnos, lunes, count( turnos ) AS TRABAJAN FROM temporal WHERE turnos= ".$turno." and lunes != '' AND lunes !=1 AND turnos != '' GROUP BY turnos' )
Como puedes ver, estás haciendo cualquier cosa, porque intentas asignar a ese campo una cadena que conteine una consulta.
Además, si esto lo intentas hacer en MySQL, como supong, no podrás jamás porque MySQL no admite que se modifique y consulte una tabla al mismo tiempo.

La tarea que te propones hacer puede haberse con un EVENT o un stored procedure, o con ambas combinadas. En cualquier caso, necesitaríamos un poco más de claridad de cómo manejas esos datos, porque n se comprende la idea del sistema.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 22/05/2012, 14:35
 
Fecha de Ingreso: enero-2008
Mensajes: 303
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: update co select

Gracias,

Tengo una tabla con:

id TURNO LUNES

1 primero un horario
2 primero un horario
3 segundo horario
4 segundo horario

etc..

La idea es recorrer esa tabla contando una serie de coincidencias (mayor que, menor... igual), cuando el conteo llegue a una cantidad:

O bien me diga la id al que llego el conteo.
O mejor realizar un unpdate de ese registro.

No se si me he explicado bien?
Un saludo
  #4 (permalink)  
Antiguo 22/05/2012, 20:22
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: update co select

Sigue siendo un poco vago.
Ese "conteo" al que te refieres, ¿qué es?
¿Un subtotal que necesitas calcular para mostrar en pantalla?
¿Subitems de un listado, como el de una factura de venta, que se reinicia con cada factura distinta?
¿Un límite de objetos a guardar?
¿Otra cosa?

Pregunto porque en el primer caso, no tiene utilidad hacer un UPDATE, porque es un dato calculable y los datos calculables no se almacenan, como regla general.
En el segundo caso, hay formas de hacer que esa numeración se genere automáticamente.
En el tercero, se implementa a nivel de aplicación, y no en la base.

Sin más claridad, no veo cómo aconsejarte...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 23/05/2012, 00:39
 
Fecha de Ingreso: enero-2008
Mensajes: 303
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: update co select

Hola Gnz,

Voy a aextenderme un poco más:

Tengo practicamente acabdo un encargo para la creación automática de cuadrantes de trabajo con los siguientes pasos:

- El cliente introduce tramos horarios, días de trabajo y numero de personas que hacen ese día ese turno.

El programa, en un primer paso, reparte en la semana los turnos asignado los días libres de cada uno. Estos datos los guardo en una base de datos temporal, con una columna por cada día de la semana donde recibo lo siguiente:

TURNO ASIGNADO LUNES MARTES MIERCOLES JUEVES .......

En cada día de la semana el programa le asigna el horario correspondiente y un día libre. y automáticamente añade las personas refuerzos necesarios para cubrir esos días libres.
AHORA VIENE MI PROBLEMA:

Por eso lo del conteo: Necesito depurar la tabla temporal para las personas que asigna el programa automaticamente, por ejem.: el lunes trabajan 7 en un turno y 7 en otro , pero libran 2, el programa, añade 2 de refuerzo,.
Se da el caso que en ese lunes solo se ha asignado dia libre a uno, YA ME SOBRA UNO, CUENTO POR TURNOS Y CUANDO AVERIGUE QUE TURNO SOBRA, SE LO QUITO AL REFUERZO.

Es un poco enredoso de explicar. No se si lo he conseguido.

Te dejo la tabla (Los 1 son dias libres)

Código HTML:
id 	turno 	turnos 	lunes 	martes 	miercoles 	jueves 	viernes 	sabado 	domingo 	saldos
1 	TURNO 1 	primero 	05:30:00 	05:30:00 	05:30:00 	05:30:00 	05:30:00 	1 	05:30:00 	0
2 	TURNO 2 	primero 	05:30:00 	05:30:00 	05:30:00 	05:30:00 	1 	05:30:00 	05:30:00 	0
3 	TURNO 3 	primero 	05:30:00 	05:30:00 	1 	05:30:00 	05:30:00 	05:30:00 	05:30:00 	0
4 	TURNO 4 	primero 	05:30:00 	05:30:00 	05:30:00 	05:30:00 	05:30:00 	05:30:00 	1 	0
5 	TURNO 5 	primero 	05:30:00 	1 	05:30:00 	05:30:00 	05:30:00 	05:30:00 	05:30:00 	0
6 	TURNO 6 	primero 	05:30:00 	05:30:00 	05:30:00 	1 	05:30:00 	05:30:00 	05:30:00 	0
7 	TURNO 7 	primero 	1 	05:30:00 	05:30:00 	05:30:00 	05:30:00 	05:30:00 	05:30:00 	0
8 	TURNO 8 	segundo 	16:30:00 	16:30:00 	16:30:00 	16:30:00 	16:30:00 	1 	16:30:00 	0
9 	TURNO 9 	segundo 	16:30:00 	16:30:00 	1 	16:30:00 	16:30:00 	16:30:00 	16:30:00 	0
10 	TURNO 10 	segundo 	16:30:00 	16:30:00 	16:30:00 	16:30:00 	16:30:00 	16:30:00 	1 	0
11 	TURNO 11 	segundo 	16:30:00 	1 	16:30:00 	16:30:00 	16:30:00 	16:30:00 	16:30:00 	0
12 	TURNO 12 	segundo 	1 	16:30:00 	16:30:00 	16:30:00 	16:30:00 	16:30:00 	16:30:00 	0
13 	TURNO 13 	segundo 	16:30:00 	16:30:00 	16:30:00 	16:30:00 	1 	16:30:00 	16:30:00 	0
14 	TURNO 14 	segundo 	16:30:00 	16:30:00 	16:30:00 	1 	16:30:00 	16:30:00 	16:30:00 	0
15 	LIBRANZA 1 	primero 	05:30:00 	05:30:00 	05:30:00 	05:30:00 	05:30:00 	05:30:00 	1 	0
16 	LIBRANZA 2 	segundo 	16:30:00 	16:30:00 	16:30:00 	16:30:00 	16:30:00 	16:30:00 	1 	0
17 	LIBRANZA 3 	primero 	05:30:00 	05:30:00 	05:30:00 	1 	05:30:00 	05:30:00 	05:30:00 	0
18 	DIFERENCIAS 	  	-1 	-1 	-1 	0 	-1 	-1 	1 	0
Muchísimas gracias.
  #6 (permalink)  
Antiguo 23/05/2012, 07:20
 
Fecha de Ingreso: enero-2008
Mensajes: 303
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: update co select

Encocntré la solución: Al menos me funciona,

Código:
SELECT count( turnos ) AS TRABAJAN, (SELECT MAX( id )  FROM temporal WHERE turnos = '".$turno."' AND martes != '' AND martes !=1 AND turnos != '' )as ide FROM temporal WHERE turnos = '".$turno."' AND martes != '' AND martes !=1 AND turnos != ''

Etiquetas: select, update
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 12:14.