Comunidad de diseño web y desarrollo en internet online

Consulta MySQL desde PHP no funciona pero si en linia de com

Citar            
MensajeEscrito el 23 Ene 2009 03:53 pm
Buenas, tengo un script PHP que realiza una consultat a MySQL pero al realizar la consulta $db->query($consulta) devuelve false. Lo más curioso és que si imprimo la consulta en pantalla, la copio i la pego en la línia de comandos si que funciona. Alguien sabe que puede pasar?

Muchas Gracias

Aqui pongo el fragmento de mi script correspondiente:


Código :

$consulta = 'select temp.id_un, unitats_ocupades.id_unitat, temp.velocitat from 
unitats_ocupades 
left join 
(select * from unitats, unitats_ocupades where unitats.id_un = unitats_ocupades.id_unitat 
and ((data_sortida <'.$data_disponible.' and data_arribada <= '.$data_disponible.') 
or (data_sortida >= '.$data_lliurar.' and data_arribada > '.$data_lliurar.')) 
and unitats.capacitat >= '.$carrega.' 
and unitats.velocitat >= '.$velocitat_minima.') 
as temp 
on temp.id = unitats_ocupades.id order by temp.velocitat desc'; 


/**/ 
echo $consulta; 


$result = $db->query($consulta); 
if (!$result) { 
echo 'No s&acute;ha pogut processar l&acute;ordre. Siusplau, intenti-ho m&eacute;s tard.'; 
exit; 
}

Por ferranpujol

177 de clabLevel



 

Mataró (Barcelona), España

opera
Citar            
MensajeEscrito el 23 Ene 2009 06:54 pm
tu consulta esta mal, no entiendo como puede funcionar en algún lado
de todos modos has un select simple para verificar que tu conexion a la DB esta bien, en ese caso postea solo tu sql con la etiqueta [mysql] para entenderlo mejor

por cierto ordena ese codigo


todo es culpa mia, aun no termino el tip sobre consultas cruzadas T_T

Por Inyaka

Claber

3176 de clabLevel

9 tutoriales
2 articulos

Genero:Masculino   Desarrollador de GAIA

Programador y fotógrafo

firefox
Citar            
MensajeEscrito el 23 Ene 2009 08:17 pm
NO hombre, de estar bien lo està. He probado una consulta simple y si funciona la conexión.....Que postee què?

Por ferranpujol

177 de clabLevel



 

Mataró (Barcelona), España

msie7
Citar            
MensajeEscrito el 23 Ene 2009 08:53 pm
poste solo el codigo SQL y mas ordenado para entenderlo mejor

Por Inyaka

Claber

3176 de clabLevel

9 tutoriales
2 articulos

Genero:Masculino   Desarrollador de GAIA

Programador y fotógrafo

firefox
Citar            
MensajeEscrito el 24 Ene 2009 02:38 pm

Código :

select temp.id_un, unitats_ocupades.id_unitat, temp.velocitat from 
unitats_ocupades left join 

//subconsulta
(
select * from unitats, unitats_ocupades 
where unitats.id_un = unitats_ocupades.id_unitat 
and (    (data_sortida <'.$data_disponible.' and data_arribada <= '.$data_disponible.') 
        or (data_sortida >= '.$data_lliurar.' and data_arribada > '.$data_lliurar.')
      ) 
and unitats.capacitat >= '.$carrega.' 
and unitats.velocitat >= '.$velocitat_minima.'
) 
as temp 

on temp.id = unitats_ocupades.id order by temp.velocitat desc

Por ferranpujol

177 de clabLevel



 

Mataró (Barcelona), España

opera
Citar            
MensajeEscrito el 24 Ene 2009 03:21 pm
tu consulta aun es muy dificil de entender, esta demasiado desordenada, esta va a ser la ultima ves que YO me de TU trabajo de ordenarla.

Código MySQL :

SELECT temp.id_un, unitats_ocupades.id_unitat, temp.velocitat
 FROM unitats_ocupades 
LEFT JOIN (
    SELECT * FROM unitats, unitats_ocupades 
    WHERE unitats.id_un = unitats_ocupades.id_unitat 
    AND (    (data_sortida <'.$data_disponible.' AND data_arribada <= '.$data_disponible.') 
            or (data_sortida >= '.$data_lliurar.' AND data_arribada > '.$data_lliurar.')
          ) 
    AND unitats.capacitat >= '.$carrega.' 
    AND unitats.velocitat >= '.$velocitat_minima.'
) AS temp 
ON temp.id = unitats_ocupades.id 
ORDER BY temp.velocitat DESC

* las funciones de sql se escriben en MAYUSCULA para poder diferenciarlas mejor
ademas debieses usar alias, para mejorar la legibilidad y poder cambiar la tabla si es preciso, esto se hace de 2 formas

Código MySQL :

FROM tabla AS t1
LEFT JOIN tabla2 t2 //<--  esta es la forma abreviada

con lo que el codigo debiera quedar asi

Código MySQL :

SELECT t.id_un, uo.id_unitat, t.velocitat
 FROM unitats_ocupades uo
LEFT JOIN (
    SELECT * FROM unitats u, unitats_ocupades uo 
    WHERE u.id_un = uo.id_unitat 
    AND (    (data_sortida <'.$data_disponible.' AND data_arribada <= '.$data_disponible.') 
            or (data_sortida >= '.$data_lliurar.' AND data_arribada > '.$data_lliurar.')
          ) 
    AND u.capacitat >= '.$carrega.' 
    AND u.velocitat >= '.$velocitat_minima.'
) AS temp t 
ON t.id = uo.id 
ORDER BY t.velocitat DESC

ahora recién tu consulta es legible, solo eso, legible, no hice ningún cambio en ella.

ahora recién se puede analizar el problema 1 no se a que tabla pertenece los campos data_sortida y data_arribada, tu LEFT JOIN esta mal planteado, pero necesito saber antes a que tabla pertenece dichos campos para darte una solución

Por Inyaka

Claber

3176 de clabLevel

9 tutoriales
2 articulos

Genero:Masculino   Desarrollador de GAIA

Programador y fotógrafo

firefox
Citar            
MensajeEscrito el 24 Ene 2009 03:25 pm
Lo siento, es que soy nuevo y no sabia todo eso. Gracias.
A ver data_sortida y data_arribada pertenecen a la tabla unitats_ocupades.

Una cosa, cuando asignas los alias uo y u a las tablas, no pones AS; ¿te lo has olvidado o es que se puede omitir?



Muchas gracias por la ayuda.

Por ferranpujol

177 de clabLevel



 

Mataró (Barcelona), España

msie7
Citar            
MensajeEscrito el 24 Ene 2009 03:27 pm
PD. use la etiqueta [ mysql] en ves de [ code] para postear el codigo por eso queda bien coloreado ;)

Por Inyaka

Claber

3176 de clabLevel

9 tutoriales
2 articulos

Genero:Masculino   Desarrollador de GAIA

Programador y fotógrafo

firefox
Citar            
MensajeEscrito el 24 Ene 2009 03:29 pm
Anda, ves, cada dia se aprenden cosas nuevas.....esque ahora hacia mucho que no pasaba por el foro. Bueno, gracias otra vez y si hay qualquier otro problema con el código sólo tienes más que decirlo.

Por ferranpujol

177 de clabLevel



 

Mataró (Barcelona), España

msie7
Citar            
MensajeEscrito el 24 Ene 2009 05:52 pm
creo que fue esto lo que intentaste decir, puedo equibocarme (pues no conosco la DB) de todos modos mas tarde te explicare esto pues ahora estoy muy ocupado

Código MySQL :

SELECT u.id_un, uo.id_unitat, u.velocitat 

 FROM unitats_ocupades uo 
 
INNER JOIN  unitats u
ON  u.id_un = uo.id_unitat
AND u.id = uo.id 

WHERE
    AND u.capacitat >= '.$carrega.'          
    AND u.velocitat >= '.$velocitat_minima.'    
    AND(
        uo.data_sortida <'.$data_disponible.' 
         AND uo.data_arribada <= '.$data_disponible.'
     ) OR (
         data_sortida >= '.$data_lliurar.' 
         AND data_arribada > '.$data_lliurar.'
     ) 

Por Inyaka

Claber

3176 de clabLevel

9 tutoriales
2 articulos

Genero:Masculino   Desarrollador de GAIA

Programador y fotógrafo

firefox
Citar            
MensajeEscrito el 25 Ene 2009 12:07 am
algo parecido me pasa a mi lo unico es q si corre pero php no la recibe no se porque estaba usando variables pero no hace el trabajo de devolver los datos

Por talcual

686 de clabLevel



 

Colombia

firefox
Citar            
MensajeEscrito el 25 Ene 2009 07:54 pm
El código que me dejaste provoca un error:

Código :

ERROR 1064 (42000): 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 u.capacitat >= 50
    AND u.velocitat >= 4
    AND(
        uo.data_sortida' at line 7


Lo que realmente me extraña es que si funcione mi codigo en la línia de comandos i no desde php.

Gracias otra vez.

Por ferranpujol

177 de clabLevel



 

Mataró (Barcelona), España

opera

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.