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