Foros del Web » Programando para Internet » PHP »

Problema con operador IN en una SELECT

Estas en el tema de Problema con operador IN en una SELECT en el foro de PHP en Foros del Web. Hola, tengo la siguiente consulta que a priori es sencilla pero me da un error: select distinct * from actividad where actividad.id_act=actividad.id_act and actividad.id_act IN ...
  #1 (permalink)  
Antiguo 05/01/2004, 09:15
 
Fecha de Ingreso: noviembre-2002
Mensajes: 273
Antigüedad: 15 años, 1 mes
Puntos: 0
Problema con operador IN en una SELECT

Hola,

tengo la siguiente consulta que a priori es sencilla pero me da un error:

select distinct *
from actividad
where actividad.id_act=actividad.id_act
and actividad.id_act IN (SELECT id_act
FROM detalle_actividad
WHERE id_emp = '4')

El error que me da es el siguiente:
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 'SELECT id_act FROM detalle_actividad WHERE id_emp = '4' ) LIMI

Que pensais que puede ser? alguna opcion del sql?

Gracias y saludos,

Mickeygz
  #2 (permalink)  
Antiguo 05/01/2004, 09:28
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 14 años, 1 mes
Puntos: 11
dependiendo de la version de mysql que uses no soporta subconsultas, creo que sólo desde la 4.1 en adelante.
__________________
Dedicado a proyectos web, actualmente desarrollando un sistema de diseño de flyers online muy fácil de usar.
  #3 (permalink)  
Antiguo 05/01/2004, 09:31
 
Fecha de Ingreso: noviembre-2002
Mensajes: 273
Antigüedad: 15 años, 1 mes
Puntos: 0
Hola,

tengo la version 4.0.16

Se puede hacer solo la actualizacion a 4.1?
  #4 (permalink)  
Antiguo 05/01/2004, 09:36
 
Fecha de Ingreso: noviembre-2002
Mensajes: 273
Antigüedad: 15 años, 1 mes
Puntos: 0
He probado haciendo 1º la consulta del IN:

$sql2=mysql_db_query($base,"SELECT id_act FROM detalle_actividad WHERE id_emp = '$empleado'");
$campos2=mysql_db_query($base,$sql2);
$listado2=mysql_fetch_assoc($campos2);

Y luego al final de la select principal poner:

.... and actividad.id_act IN $listado2[id_act]";

Pero también me da error...

Help!
  #5 (permalink)  
Antiguo 05/01/2004, 09:51
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 14 años, 1 mes
Puntos: 11
los valores de comparacion deben ir entre parentesis:

where campo IN (valor1, valor2, valor3)
__________________
Dedicado a proyectos web, actualmente desarrollando un sistema de diseño de flyers online muy fácil de usar.
  #6 (permalink)  
Antiguo 05/01/2004, 10:01
 
Fecha de Ingreso: noviembre-2002
Mensajes: 273
Antigüedad: 15 años, 1 mes
Puntos: 0
Lo pongo con parentesis in al editar la consulta me queda:

...... and actividad.id_act IN ('')

No me sustituye por los valores devueltos....

  #7 (permalink)  
Antiguo 05/01/2004, 10:30
 
Fecha de Ingreso: noviembre-2002
Mensajes: 273
Antigüedad: 15 años, 1 mes
Puntos: 0
Perdon,

he mirado con <? phpinfo(); ?> y tengo la version 4.3.3

Entonces con esta version se supone que puedo hacer subqueries...

Tendré algun parametro mal configurado?
  #8 (permalink)  
Antiguo 05/01/2004, 11:18
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
No .. mickeyzgz .. una cosa es la versión de PHP y otra la de Msyql que uses .. ambos no tienen nada que ver pese que con "PHP" accedas a tu Msyql ..

Fijate en el manual de Mysql como se hacen "sub-consultas" para versiones -inferiores- de Mysql 4.1

http://www.mysql.com/doc/en/Rewriting_subqueries.html


Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #9 (permalink)  
Antiguo 06/01/2004, 10:06
 
Fecha de Ingreso: noviembre-2002
Mensajes: 273
Antigüedad: 15 años, 1 mes
Puntos: 0
Muchas gracias Cluster,

no recordaba esa forma de hacer la query pero con el ejemplo que me has indicado ha sido suficiente.

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:52.