Comunidad de diseño web y desarrollo en internet online

Funcion php dentro de consulta mysql

Citar            
MensajeEscrito el 12 May 2014 09:11 pm
Buenas,
Tengo una consulta en una base de datos donde me gustaría poner una función php en el WHERE, y no sé como hacerlo.
Pongo un codigo de ejemplo.

<?php
function distance($a,$b,$c,$d,$e){
.......codigo......
}
......................
......................
$var1=7;
$var2=13;
$var3=15;
$var4=12;
//mas codigo..
$query = "SELECT * FROM tabla WHERE (distance(tabla.Orig, tabla.Dest, ".$var1.", ".$var2.", ".$var3.") - ".$var4.") < ".$var4." ";
//mas codigo............
?>
Haber si alguien me puede aclarar como hacerlo, o alguna idea sin tener que recurrir a extraer todos los datos de la tabla y luego pasar la función.

Gracias a todos.

Por Sont

16 de clabLevel



 

firefox
Citar            
MensajeEscrito el 13 May 2014 12:18 pm
¿Qué se supone que debe hacer esa función?.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 13 May 2014 12:48 pm

DriverOp escribió:

¿Qué se supone que debe hacer esa función?.


Gracias por la respuesta.
Puede que no sea el título de la pregunta el mas adecuado y lo siento, quizá debía haber puesto de titulo: "concatenar una función php a consulta mysql".
La función calcula si la distancia entre la longitud y la latitud de un punto con la distancia de otro punto de diferentes longitud y latitud es menor que $Valor :

Código:
function distance($lat1, $lon1, $lat2, $lon2, $unit) {
$theta = $lon1 - $lon2;
$dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta));
$dist = acos($dist);
$dist = rad2deg($dist);
$miles = $dist * 60 * 1.1515;
$unit = strtoupper($unit);
if ($unit == "K") {
return ($miles * 1.609344);
} else if ($unit == "N") {
return ($miles * 0.8684);
} else {
return $miles;
}
}
----------------
--------
$Des_Lat=41;
$Des_Lon=15;
$unit="K";
$Valor=3000;
$query = "SELECT * FROM tabla WHERE (distance(tabla.Orig_Lat, tabla.Orig_Long, ".$Des_Lat.", ".$Des_Lon.", ".$unit.")-".$Valor.") < 1 ";
Tal vez, no se puede concatenar una función php a una consulta mysql?
He probado concatenar la funcion a la consulta de todas las formas y no puedo.
Gracias.

Por Sont

16 de clabLevel



 

firefox
Citar            
MensajeEscrito el 13 May 2014 02:13 pm
Ammm como se supone que obtienes tabla.Orig_lat ??

Por que ya la estas metiendo a la funcion y no veo que este definida.

intenta hacer un echo $query; para que veas la consulta por que la consulta es un String, por lo que debes obtener el valor antes.

Por elporfirio

Claber

652 de clabLevel

1 tutorial

Genero:Masculino  

FullStack Web Developer

chrome
Citar            
MensajeEscrito el 13 May 2014 02:54 pm

elporfirio escribió:

Ammm como se supone que obtienes tabla.Orig_lat ??

Por que ya la estas metiendo a la funcion y no veo que este definida.

intenta hacer un echo $query; para que veas la consulta por que la consulta es un String, por lo que debes obtener el valor antes.


Gracias por responder, se agradece.
A la funcion ya le he llamado de tu. Le he faltado varias veces al respeto, le he recordado a su madre, y no se que hacer mas.
El valor de tabla.Orig_Lat y tabla.Orig.Lon, son datos que estan dentro de la BD y estan definidas en BD / latabla.
La consulta es un string, hago un apaño para hacer un echo a $query ya que es un archivo php que proviene de una consulta de ajax, y sale "creo" que bién.
codigo:
$query = "SELECT * FROM clasificacion WHERE distance(clasificacion.Orig_Lat, clasificacion.Orig_Long, ".$Lat.", ".$Lon.", ".$unit.")-".$Valor." < 1 ";

echo a $query:
SELECT * FROM clasificacion WHERE distance(clasificacion.Orig_Lat, clasificacion.Orig_Long, 47, 8, K)-2999 < 1

Yo veo bien la salida pero realmente ¿esta bien la salida de echo $query?.
La función distance() funciona perfectamente fuera de la consulta mysql.

Por Sont

16 de clabLevel



 

firefox
Citar            
MensajeEscrito el 13 May 2014 02:58 pm
también he probado, que me parece mas logico poner comillas simples a $unit
quedaria así:
$query = "SELECT * FROM clasificacion WHERE distance(clasificacion.Orig_Lat, clasificacion.Orig_Long, ".$Lat.", ".$Lon.", '".$unit."')-".$Valor." < 1 ";

Por Sont

16 de clabLevel



 

firefox
Citar            
MensajeEscrito el 13 May 2014 08:48 pm
Podria colocar el modelo de tu tabla ??

Esto se puede hacer con MySQL Workbench =) asi sabremos la estructura de la tabla para orientarle mejor

Por elporfirio

Claber

652 de clabLevel

1 tutorial

Genero:Masculino  

FullStack Web Developer

chrome
Citar            
MensajeEscrito el 13 May 2014 09:34 pm

elporfirio escribió:

Podria colocar el modelo de tu tabla ??

Esto se puede hacer con MySQL Workbench =) asi sabremos la estructura de la tabla para orientarle mejor


Uff, no habría problema, pero no quiero entrar en Workbench, no tengo ganas de aprender otra cosa mas, se agradece mucho la sugerencia, pero en poco tiempo me he tenido que poner al día de php, javascript, ajax, html5 etc etc .

El problema es poner en el query una función php incluyendo 5 parámetros 2 campos de la BD, y 3 variables php, no hay forma de concatenar eso.
Así he decidido y he probado que se puede hacer recorriendo con mysqli_fetch_array toda la base (325000 datos) y luego con la salida de los resultados aplicar la dichosa funcion.
O bien según como funcione esta solución, hacer una base de datos temporal para incluir las variables php en esa BD, y luego en los parametros de la función en vez de incluir variables y campos solo incluyo campos.
Aún así me lo quiero pensar unos dias, pensar a veces hace que se me encienda la luz.

Gracias por vuestro tiempo y las respuestas.

Por Sont

16 de clabLevel



 

firefox
Citar            
MensajeEscrito el 14 May 2014 12:24 pm
Bueno, parece que sí es lo que he entendido la primera vez.

Lo siento, lo que quieres hacer, no se puede hacer tal como lo piensas. PHP y SQL son dos lenguajes diferentes que se ejecutan en contextos diferentes.

Lo que quieres es que SQL ejecute una función de otro lenguaje que está en otra máquina y que la use como filtro de la tabla que está leyendo.

Me parece que la solución no pasa por ahí. Lo que deberías hacer es una de dos cosas: O leer la tabla y filtrar sus resultados en PHP, o bién, escribir una vista o procedimiento almacenado en SQL.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 14 May 2014 07:11 pm

DriverOp escribió:

Bueno, parece que sí es lo que he entendido la primera vez.

Lo siento, lo que quieres hacer, no se puede hacer tal como lo piensas. PHP y SQL son dos lenguajes diferentes que se ejecutan en contextos diferentes.

Lo que quieres es que SQL ejecute una función de otro lenguaje que está en otra máquina y que la use como filtro de la tabla que está leyendo.

Me parece que la solución no pasa por ahí. Lo que deberías hacer es una de dos cosas: O leer la tabla y filtrar sus resultados en PHP, o bién, escribir una vista o procedimiento almacenado en SQL.


Si si gracias, ahora lo veo y no se ni como se me había ocurrido intentar poner una función php en codigo sql.

Recorreré la tabla y ejecutaré la función .
Gracias

Por Sont

16 de clabLevel



 

firefox

 

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