Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Php consulta mysql extensa no funciona.

Estas en el tema de Php consulta mysql extensa no funciona. en el foro de PHP en Foros del Web. Buenos días, estoy haciendo una consulta en mysql con php, la consulta tiene varios joins y union con otras tablas, lo que si es que ...
  #1 (permalink)  
Antiguo 02/10/2013, 08:26
Avatar de higiniosamaniego  
Fecha de Ingreso: noviembre-2012
Mensajes: 38
Antigüedad: 11 años, 5 meses
Puntos: 0
Php consulta mysql extensa no funciona.

Buenos días, estoy haciendo una consulta en mysql con php, la consulta tiene varios joins y union con otras tablas, lo que si es que no funciona, les paso el codigo para que vean y me guien.

Código PHP:

$conexion 
mysql_connect("localhost","bd","blabla") or die("No se pudo conectar a la base de datos"); 
mysql_select_db("FactuSD") or die("No se puede seleccionar BD");  

$usuario=mysql_query("Select login, email from sec_users"); 

    while(
$arr=mysql_fetch_array($usuario)){
    
        
$userLogin $arr['login'];
        
//echo $userLogin."<br>";
        
$solicitud mysql_query("
                Select DS.IdSolicitud, S.FechaCarga as Fecha, TE.Descripcion as TipoEmision,
                E.Descripcion as Empresa, SI.Descripcion as Sistema, S.ImporteNCR, SU.name as Solicitante, 
                ES.Descripcion as Estado from DetalleSolicitud DS
                JOIN Solicitud S ON DS.IdSolicitud = S.IdSolicitud
                JOIN Empresa E ON S.IdEmpresa = E.IdEmpresa
                JOIN Estado ES ON DS.IdEstado = ES.IdEstado
                JOIN TipoEmision TE ON S.IdTipo = TE.IdTipo
                JOIN SistemaElemento SE ON S.IdSE = SE.IdSE
                JOIN Sistema SI ON SE.IdSistema = SI.IdSistema
                JOIN Acceso A ON S.IdAcceso = A.IdAcceso
                JOIN sec_users SU ON A.IdUsuario = SU.login
                Where DS.IdDetalle IN 
                 (SELECT DSA.IdDetalle FROM vDetalleSolicitudAprobador DSA 
                WHERE DSA.IdUsuario =* 'asoler' 
                 AND DSA.IdSolicitud = DS.IdSolicitud AND DSA.IdEstado IN (1, 5) 
                GROUP BY DSA.IdSolicitud HAVING (DS.Prioridad = MIN(DSA.Prioridad)) 
                AND (MIN(DSA.Prioridad) = (SELECT MIN(DSAT.Prioridad) 
                FROM vDetalleSolicitudAprobador DSAT* 
                WHERE DSAT.IdSolicitud = DSA.IdSolicitud AND DSAT.IdEstado IN (1, 5)))) 
                AND DS.IdSolicitud not In (Select IdSolicitud from DetalleSolicitud 
                where IdEstado = 3)
                UNION ALL
                SELECT DS.IdSolicitud, S.FechaCarga as Fecha, TE.Descripcion as TipoEmision,
                E.Descripcion as Empresa,* SI.Descripcion as Sistema, S.ImporteNCR, SU.name as Solicitante, 
                ES.Descripcion as Estado
                FROM DetalleSolicitud DS
                JOIN Solicitud S ON DS.IdSolicitud = S.IdSolicitud
                JOIN Nivel N ON S.IdTipo = N.IdTipo
                JOIN sec_groups SG ON N.IdCategoria = SG.IdCategoria
                JOIN Acceso A ON SG.group_id = A.IdPerfil And S.IdEmpresa = A.IdEmpresa
                JOIN TipoEmision TE ON S.IdTipo = TE.IdTipo
                JOIN Empresa E ON S.IdEmpresa = E.IdEmpresa
                JOIN SistemaElemento SE ON S.IdSE = SE.IdSE
                JOIN Sistema SI ON SE.IdSistema = SI.IdSistema
                JOIN Acceso AC ON S.IdAcceso = AC.IdAcceso
                JOIN sec_users SU ON AC.IdUsuario = SU.login
                JOIN Estado ES ON DS.IdEstado = ES.IdEstado
                where DS.IdEstado = 4 
                and A.IdUsuario = 'asoler'
                and SG.IdCategoria = 3
                and NOT EXISTS(Select D.IdSolicitud From DetalleSolicitud D Where D.IdSolicitud = DS.IdSolicitud AND D.IdEstado != 4)
                Group by DS.IdSolicitud
                Union ALL
                Select DS.IdSolicitud, S.FechaCarga as Fecha, TE.Descripcion as TipoEmision,
                E.Descripcion as Empresa, SI.Descripcion as Sistema, S.ImporteNCR, SU.name as Solicitante, 
                ES.Descripcion as Estado
                From DetalleSolicitud DS
                JOIN Solicitud S ON DS.IdSolicitud = S.IdSolicitud
                JOIN Empresa E ON S.IdEmpresa = E.IdEmpresa
                JOIN Estado ES ON DS.IdEstado = ES.IdEstado
                JOIN TipoEmision TE ON S.IdTipo = TE.IdTipo
                JOIN SistemaElemento SE ON S.IdSE = SE.IdSE
                JOIN Sistema SI ON SE.IdSistema = SI.IdSistema
                JOIN Acceso A ON S.IdAcceso = A.IdAcceso
                JOIN sec_users SU ON A.IdUsuario = SU.login
                Where
                DS.IdEstado = 3 AND S.IdAcceso IN 
                (Select IdAcceso From Acceso where IdUsuario = 'asoler')
                "
);
                
                
//$solicitud = mysql_query("select * from Acceso where IdUsuario = $userLogin'");
                
                
while($arr1=mysql_fetch_array($solicitud)){
                    echo 
"<pre>";
                    
print_r($arr1);
                    echo 
"</pre>";
                }
    
    } 
AL ejecutar me muestra que mysql_fetch_array necesita un parametro.

Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given

ese es el error, lo que me dí cuenta es que solo el select no ejecuta, con otro select mas pequeño si funciona, espero puedan ayudarme con una alternativa de otra funcion o algo. Gracias...
  #2 (permalink)  
Antiguo 02/10/2013, 08:31
Avatar de h2swider  
Fecha de Ingreso: julio-2007
Ubicación: Ciudad de Buenos Aires
Mensajes: 932
Antigüedad: 16 años, 9 meses
Puntos: 194
Respuesta: Php consulta mysql extensa no funciona.

No hay mucha vuelta que darle, tu sql esta fallando. Intenta imprimiendo el error sql antes que nada

Intenta hacer

Código PHP:
Ver original
  1. $solicitud = mysql_query("
  2.                Select DS.IdSolicitud, S.FechaCarga as Fecha, TE.Descripcion as TipoEmision,
  3.                E.Descripcion as Empresa, SI.Descripcion as Sistema, S.ImporteNCR, SU.name as Solicitante,
  4.                ES.Descripcion as Estado from DetalleSolicitud DS
  5.                JOIN Solicitud S ON DS.IdSolicitud = S.IdSolicitud
  6.                JOIN Empresa E ON S.IdEmpresa = E.IdEmpresa
  7.                JOIN Estado ES ON DS.IdEstado = ES.IdEstado
  8.                JOIN TipoEmision TE ON S.IdTipo = TE.IdTipo
  9.                JOIN SistemaElemento SE ON S.IdSE = SE.IdSE
  10.                JOIN Sistema SI ON SE.IdSistema = SI.IdSistema
  11.                JOIN Acceso A ON S.IdAcceso = A.IdAcceso
  12.                JOIN sec_users SU ON A.IdUsuario = SU.login
  13.                Where DS.IdDetalle IN
  14.                 (SELECT DSA.IdDetalle FROM vDetalleSolicitudAprobador DSA
  15.                WHERE DSA.IdUsuario =* 'asoler'
  16.                 AND DSA.IdSolicitud = DS.IdSolicitud AND DSA.IdEstado IN (1, 5)
  17.                GROUP BY DSA.IdSolicitud HAVING (DS.Prioridad = MIN(DSA.Prioridad))
  18.                AND (MIN(DSA.Prioridad) = (SELECT MIN(DSAT.Prioridad)
  19.                FROM vDetalleSolicitudAprobador DSAT*
  20.                WHERE DSAT.IdSolicitud = DSA.IdSolicitud AND DSAT.IdEstado IN (1, 5))))
  21.                AND DS.IdSolicitud not In (Select IdSolicitud from DetalleSolicitud
  22.                where IdEstado = 3)
  23.                UNION ALL
  24.                SELECT DS.IdSolicitud, S.FechaCarga as Fecha, TE.Descripcion as TipoEmision,
  25.                E.Descripcion as Empresa,* SI.Descripcion as Sistema, S.ImporteNCR, SU.name as Solicitante,
  26.                ES.Descripcion as Estado
  27.                FROM DetalleSolicitud DS
  28.                JOIN Solicitud S ON DS.IdSolicitud = S.IdSolicitud
  29.                JOIN Nivel N ON S.IdTipo = N.IdTipo
  30.                JOIN sec_groups SG ON N.IdCategoria = SG.IdCategoria
  31.                JOIN Acceso A ON SG.group_id = A.IdPerfil And S.IdEmpresa = A.IdEmpresa
  32.                JOIN TipoEmision TE ON S.IdTipo = TE.IdTipo
  33.                JOIN Empresa E ON S.IdEmpresa = E.IdEmpresa
  34.                JOIN SistemaElemento SE ON S.IdSE = SE.IdSE
  35.                JOIN Sistema SI ON SE.IdSistema = SI.IdSistema
  36.                JOIN Acceso AC ON S.IdAcceso = AC.IdAcceso
  37.                JOIN sec_users SU ON AC.IdUsuario = SU.login
  38.                JOIN Estado ES ON DS.IdEstado = ES.IdEstado
  39.                where DS.IdEstado = 4
  40.                and A.IdUsuario = 'asoler'
  41.                and SG.IdCategoria = 3
  42.                and NOT EXISTS(Select D.IdSolicitud From DetalleSolicitud D Where D.IdSolicitud = DS.IdSolicitud AND D.IdEstado != 4)
  43.                Group by DS.IdSolicitud
  44.                Union ALL
  45.                Select DS.IdSolicitud, S.FechaCarga as Fecha, TE.Descripcion as TipoEmision,
  46.                E.Descripcion as Empresa, SI.Descripcion as Sistema, S.ImporteNCR, SU.name as Solicitante,
  47.                ES.Descripcion as Estado
  48.                From DetalleSolicitud DS
  49.                JOIN Solicitud S ON DS.IdSolicitud = S.IdSolicitud
  50.                JOIN Empresa E ON S.IdEmpresa = E.IdEmpresa
  51.                JOIN Estado ES ON DS.IdEstado = ES.IdEstado
  52.                JOIN TipoEmision TE ON S.IdTipo = TE.IdTipo
  53.                JOIN SistemaElemento SE ON S.IdSE = SE.IdSE
  54.                JOIN Sistema SI ON SE.IdSistema = SI.IdSistema
  55.                JOIN Acceso A ON S.IdAcceso = A.IdAcceso
  56.                JOIN sec_users SU ON A.IdUsuario = SU.login
  57.                Where
  58.                DS.IdEstado = 3 AND S.IdAcceso IN
  59.                (Select IdAcceso From Acceso where IdUsuario = 'asoler')
  60.                ") or die(mysql_error());
__________________
Codifica siempre como si la persona que finalmente mantedra tu código sea un psicópata violento que sabe donde vives
  #3 (permalink)  
Antiguo 02/10/2013, 09:12
Avatar de DooBie  
Fecha de Ingreso: septiembre-2004
Mensajes: 1.101
Antigüedad: 19 años, 7 meses
Puntos: 71
Respuesta: Php consulta mysql extensa no funciona.

Me preocupan estas líneas, y explico por qué, igual soy yo el que no se nada de esto:
Código PHP:
WHERE DSA.IdUsuario =* 'asoler'  // No deberia ser WHERE DSA.IdUsuario = 'asoler'
FROM vDetalleSolicitudAprobador DSAT// Falta un . ? FROM vDetalleSolicitudAprobador DSAT.*
E.Descripcion as Empresa,* SI.Descripcion as Sistema // Ese * no se que hace ahí 
Igual no es eso, y como dice h2swider, cuelga el error que te da.



EDIT: Otra cosa, yo no usaría alias hasta saber con seguridad que la consulta funciona.
  #4 (permalink)  
Antiguo 02/10/2013, 09:21
Avatar de higiniosamaniego  
Fecha de Ingreso: noviembre-2012
Mensajes: 38
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Php consulta mysql extensa no funciona.

Muchisimas gracias a los dos! es que estoy con un tiempo bastante corto de desarrollo, por lo que los problemas que tengo debo de solucionarlos rapido, y ya ví que la consulta tiene * (asteriscos) dentro, en la copia y pegada de la consulta al ide que utilizo quizas se corrompió el query, quitando eso se ejecuta bien, muchas gracias por responder.
  #5 (permalink)  
Antiguo 02/10/2013, 09:34
Avatar de DooBie  
Fecha de Ingreso: septiembre-2004
Mensajes: 1.101
Antigüedad: 19 años, 7 meses
Puntos: 71
Respuesta: Php consulta mysql extensa no funciona.

Cita:
Iniciado por higiniosamaniego Ver Mensaje
Muchisimas gracias a los dos! es que estoy con un tiempo bastante corto de desarrollo, por lo que los problemas que tengo debo de solucionarlos rapido, y ya ví que la consulta tiene * (asteriscos) dentro, en la copia y pegada de la consulta al ide que utilizo quizas se corrompió el query, quitando eso se ejecuta bien, muchas gracias por responder.
Problema solucionado entonces¿?
  #6 (permalink)  
Antiguo 02/10/2013, 13:05
Avatar de higiniosamaniego  
Fecha de Ingreso: noviembre-2012
Mensajes: 38
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Php consulta mysql extensa no funciona.

Si problema solucionado. Gracias.

Etiquetas: extensa, fecha, mysql, select, sql, tabla
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 10:53.