Hola a todos,
tengo un problema con una consulta a una BD en mysql.
Estoy tratando de hacer una consulta que relaciona tres tablas y debo enviar un parámetro para realizar la consulta. El parámetro es un array y pues no me trae la información que necesito.
Dicha consulta la he intentado hacer de dos formas la primerra:
public function getRestauranteOfrece($sqlO){
return $this->find("conditions: $sqlO",
'columns: restaurante.id, nombre, ofrece.tcocina_id',
'join: inner join ofrece on restaurante.id = ofrece.restaurante_id');
}
Leyendo el libro de kumbia, me dice que esta es la forma correcta de hacerlo, bueno en la parte de 'condition' decidí colocar el array, pero no funciona.
La otra fue haciendo la consulta por medio de SQL pero también tengo el problema de array.
public function getRestauranteOfrece($sqlO){
return $this->find_by_sql("select distinct(R.id), nombre
from restaurante R, ofrece O
where R.id = O.restaurante_id
and O.tcocina_id = $sqlO)"
);
}
Quisiera saber si alguien sabe alguna forma de formular esta consulta de manera correcta o si no hay forma de hacerlo así
De antemano gracias por la ayuda
Comentarios
¿que resultado obtiene al ejecutar la consulta?¿ algún error?
$sqlO es un array de valores enteros, $sqlO = {1,2,3,4,...}
y el error que me sale es:
KumbiaException: Unknown column 'Array' in 'where clause' al ejecutar "SELECT restaurante.id,nombre,ofrece.tcocina_id FROM restaurante inner join ofrece on restaurante.id = ofrece.restaurante_id WHERE Array" (0)
En el archivo /var/www/gourmet/core/libs/db/adapters/mysql.php en la línea: 158
Bueno no se si sirva de algo, pero bueno, tengo tres tablas: 'restaurante', 'ofrece', 'presta', la idea de la consulta es sacar los restaurantes que presten todos los servicios presentes en el array, caso idéntico con la tabla ofrece.
Desde el controlador envío dos array's de la siguiente manera:
if ($this->has_post('cocinas')) {
foreach($this->post('cocinas') as $key => $value){
$sqlO[$i] = $key;
$i++;
}
}
$i=0;
if ($this->has_post('servicios')) {
foreach($this->post('servicios') as $key => $value){
$sqlP[$i] = $value;
$i++;
}
}
$restaurante2 = $restaurante2 -> getRestauranteOfrece($sqlO);
$restaurante3 = $restaurante3 ->getRestaurantePresta($sqlP);
donde 'cocinas' y 'servicios' son dos array's que llegan desde la vista, los cuales contienen la selección de una serie de checkbox.
Nuevamente gracias por tu colaboración y pronta respuesta.
Es posible que lo que retorne una consulta a la BD se guarde en un objeto similar a un dataset sobre el cual hacer otras consultas???
el error esta en el parámetro que le pasa ya que lo envía directo como array y el sql no queda bien (WHERE Array" (0))
sobre lo del objeto que se guarde como un dataset, le sera útil ver las asociaciones de los modelos
La consulta final quede así, por si se el ofrece a alguien:
$sqlP = "(";
if ($this->has_post('servicios'))
foreach($this->post('servicios') as $key => $value){
$sqlP .= $key." , " ;
}
$sqlP = substr($sqlP,0,(strlen($sqlP)-3)); // con esta linea almaceno en $sqlP
$sqlP .= ")"; // todo lo que esta en el array que viene
// desde la vista
if ($sqlP == ")" )
$sqlP = "";
$sqltotal = "";
// Finalmente le armo la consulta sql concatenado $sqlP
$sqltotal = "select distinct(R.id),R.id,R.nombre
from restaurante R, presta P
where P.servicio_id in " . $sqlP . " and R.id = P.restaurante_id";
}
Se que este tipo de consultas debe evitarse pero no encontré otra forma de hacerlo.
Muchas gracias por la ayuda.
muchas gracias por compartir la solución a la cual llego