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í
$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.
Sip me di cuenta del error, asi que decidí concatenar todos los datos que quería dentro del array, y ahora si armar la consulta.
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.