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

Update con Subconsulta

Estas en el tema de Update con Subconsulta en el foro de Mysql en Foros del Web. Tengo la siguiente tabla: RUTA INTERMEDIA id_rutinter: auto_increment. id_rutas= Este id es el origen. id_ruta_destino= Este es el destino. ruta_intermedia. ord_visual La idea de esta ...
  #1 (permalink)  
Antiguo 31/07/2012, 16:38
 
Fecha de Ingreso: junio-2012
Mensajes: 29
Antigüedad: 11 años, 10 meses
Puntos: 0
Pregunta Update con Subconsulta

Tengo la siguiente tabla:

RUTA INTERMEDIA
id_rutinter: auto_increment.
id_rutas= Este id es el origen.
id_ruta_destino= Este es el destino.
ruta_intermedia.
ord_visual

La idea de esta tabla es que por ejemplo cuando uno quiere ir de una ciudad a otra, por ejemplo de ciudad 1 a ciudad 2, pueden existir un maximo de 8 rutas_intermedias, por ejemplo ruta_intermedia1 = terminal, ruta_intermedia2=peaje, etc. Tiene que haber un minimo de 2 y maximo 8.
El orden_visual es una constante que va de 2 a 9 de acuerdo a la ruta_intermedia.
ruta_intermedia1=2;
ruta_intermedia2=3
ruta_intermedia3=4
ruta_intermedia4=5
ruta_intermedia5=6
ruta_intermedia6=7
ruta_intermedia7=8
ruta_intermedia8=9

Buenas tengo un update con la siguiente subconsulta:

Código PHP:
$update_rut_inter1="UPDATE rut_intermedia SET ruta_intermedia = '$rut_inter1' WHERE id_rutinter = (SELECT id_rutinter FROM (SELECT id_rutas, id_ruta_destino, ruta_intermedia, id_rutinter, ord_visual FROM rut_intermedia WHERE id_rutas = id_ruta_destino AND id_rutas='$idrutas' AND id_rutas_destino=$idrutas_destino AND ord_visual=2) AS alias_rut_intermedia);";
mysql_query($update_rut_inter1) or die(mysql_error()); 
La idea de la consulta es que realize el update del nombre de la ruta intermedia, que es el campo ruta_intermedia, fijandose que el id_rutas y el id_ruta_destino sean iguales y el ord_visual sea 2.

Estoy trabajando con PHP 5 y Mysql.
Cuando ejecuto la orden me sale el siguiente error:

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 'AND ord_visual=2) AS alias_rut_intermedia)' at line 1

Nose porque me sale este error!! y me esta volviendo locoo!!
No puedo encontrar el error.
Espero ustedes me puedan ayudar.
Muchas Gracias de antemano
  #2 (permalink)  
Antiguo 01/08/2012, 02:51
Usuario no validado
 
Fecha de Ingreso: abril-2008
Mensajes: 50
Antigüedad: 16 años
Puntos: 16
Respuesta: Update con Subconsulta

Hola...

A partir de lo que mencionas, he probado esto:

Código SQL:
Ver original
  1. CREATE TABLE  fdw_example2 (  
  2.   id_rutas INT(10) NOT NULL,
  3.   id_ruta_destino INT(10) NOT NULL,
  4.   id_rutas_destino INT(10) NOT NULL,
  5.   ruta_intermedia INT(10) NOT NULL,
  6.   id_rutinter INT(10) NOT NULL,
  7.   ord_visual INT(10) NOT NULL
  8. ) ENGINE=InnoDB  DEFAULT CHARSET=latin1;
  9.  
  10. UPDATE fdw_example2 SET ruta_intermedia = -2
  11. WHERE id_rutinter =
  12. (SELECT id_rutinter
  13.         FROM (SELECT id_rutas, id_ruta_destino, ruta_intermedia, id_rutinter, ord_visual
  14.                 FROM fdw_example2
  15.                 WHERE id_rutas = id_ruta_destino
  16.                         AND id_rutas= -1
  17.                         AND id_rutas_destino=-3
  18.                         AND ord_visual=2
  19.             ) AS alias_rut_intermedia
  20. );

Hay un campo "id_rutas_destino" que no tengo claro si debe o no debe existir en la tabla. Yo lo agregue a la tabla de pruebas por si acaso. Si se hace referencia a un campo no existente, el error es distinto al que estás recibiendo.

El asunto es que no recibo error de sintaxis al probar ese UPDATE.

Te sugiero que verifiques el comando. Talvez una de las variables que utilizas va vacía o con algún valor no válido. Tiene pinta de ser PHP lo que utilizas, así que con poner un "echo $update_rut_inter1.'<br/>';" debería bastar para ver exactamente como está saliendo la sentencia SQL.

O publica el SQL de la tabla con unos cuantos registros para probar a ver si te puedo ayudar a encontrar el error.
  #3 (permalink)  
Antiguo 01/08/2012, 04:27
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 con Subconsulta

La consulta en sí, como dice @pcid, no contiene errores sintácticos, aunque si tiene algunos problemas y al menos un par de defectos.
Tu consulta es así:
Código MySQL:
Ver original
  1.     rut_intermedia
  2.     SET ruta_intermedia = '$rut_inter1'
  3. WHERE id_rutinter =
  4.     (SELECT id_rutinter
  5.     FROM
  6.         (SELECT
  7.             id_rutas,
  8.             id_ruta_destino,
  9.             ruta_intermedia,
  10.             id_rutinter, ord_visual
  11.         FROM rut_intermedia
  12.         WHERE
  13.             id_rutas = id_ruta_destino
  14.             AND id_rutas='$idrutas'
  15.             AND id_rutas_destino=$idrutas_destino
  16.             AND ord_visual=2) AS alias_rut_intermedia
  17.         )
- Hay un error base y es que estás tratando de hacer un UPDATE sobre la misma tabla que haces el subselect, cosa que MySQL no permite.

- Hay un error de diseño de la consulta, cuando realizas una subconsulta que devuelve cinco campos, y sobre esa haces otra para dejar uno... Eso no tiene sentido.
¿Por qué consultas un sólo campo en ese caso?
Código MySQL:
Ver original
  1.     rut_intermedia
  2.     SET ruta_intermedia = '$rut_inter1'
  3. WHERE id_rutinter =
  4.     (SELECT
  5.             id_rutinter
  6.      FROM rut_intermedia
  7.      WHERE
  8.             id_rutas = id_ruta_destino
  9.             AND id_rutas='$idrutas'
  10.             AND id_rutas_destino=$idrutas_destino
  11.             AND ord_visual=2
  12.       )
- El otro error conceptual es que si esa subconsulta se hace sobre la misma tabla que realizas el UPDATE, ¿para qué haces el SELECT? ¿Por qué no pones todo en el mismo UPDATE?
Código MySQL:
Ver original
  1.     rut_intermedia
  2.     SET ruta_intermedia = '$rut_inter1'
  3.      d_rutas = id_ruta_destino
  4.      AND id_rutas='$idrutas'
  5.      AND id_rutas_destino=$idrutas_destino
  6.      AND ord_visual=2;
Me queda la duda de qué quisite relacionar con esto:
Cita:
d_rutas = id_ruta_destino
si los campos de la misma tabla, o los de la tabla en la subconsulta con la de la consulta mayor.

Finalmente: Por un lado te advierto que no se debe postear código de programación en este foro. Es OFF-TOPIC y genera confusiones porque a) esconde problemas generados por las variables que no sabemos si contienen datos o si tienen los correctos. b) No todos los que usamos MySQL programamos, ni programamos en PHP (PHP y MySQL son cosas independientes una de otra).

Lo que si puedo inferir es que @pcid tiene razón al suponer que la variable no contiene datos. En ese caso, si la variable $idrutas_destino estuviese vacía, lo que quedaría como consulta sería (usando el ultimo ejemplo):

Código MySQL:
Ver original
  1.     rut_intermedia
  2.     SET ruta_intermedia = '$rut_inter1'
  3.      d_rutas = id_ruta_destino
  4.      AND id_rutas='$idrutas'
  5.      AND id_rutas_destino=
  6.      AND ord_visual=2;
Y eso sí contiene un error sintáctico, no detectable en el codigo programado sino en la consulta construida.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: php, select, sql, subconsulta, tabla, update, campos
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 11:28.