Extendiendo una declaración de MySQL

¿Es posible en CodeIgniter o PHP extender una declaración de MySQL? Por ejemplo. Si tengo $query1. ¿Puedo agregar a $query1 en otro $this->db->query() ejemplo:

$query1 = this->db->query("SELECT * FROM users WHERE a = b");

$query1(or 2) = $this->db->query("AND b = c");

preguntado el 27 de julio de 12 a las 21:07

@SnowBlind: Creo que probó el ejemplo que mostró en la pregunta... -

@Rocket Bueno, ¿eso funcionó entonces? -

2 Respuestas

Ponga su declaración en una var y extienda la cadena si es necesario:

$strStatement = "SELECT * FROM users WHERE a = b";

if ( /* whatever */ )
{
    $strStatement .= " AND b = c";
}

$objResult = $this->db->query( $strStatement );

Respondido 27 Jul 12, 21:07

@MichaelGrigsby No sé por qué aceptaste esta respuesta, porque no aprovecha cualquier de las características avanzadas en codeigniter. Hay clases ya escritas que te ayudan a hacer exactamente lo que quiere hacer en muchas menos líneas de código que esta solución. Vea mi respuesta a continuación, y lee la documentacion... - orourkek

No me gusta meterme con el método MySQL de CodeIgniter principalmente porque no puedo usar la función NOW(). No uso esos o modelos cuando se trata de Ci - Michael Grigby

revisa la documentación. Esto se puede lograr (como un ejemplo) con:

$this->db->where('a', 'b');
if($condition)
{
    $this->db->where('b', 'c');
}
$this->db->get('users'); //implicitly runs a "SELECT *"

Respondido 28 Jul 12, 00:07

¿Quién votó negativamente para comentar por qué? Esta es una forma perfectamente válida (y más eficiente) de lograr exactamente lo que quería el OP... - orourkek

¿Por qué crees que esto es más eficiente? ¿No cree que tiene más gastos generales llamando a 3 métodos de objeto que llamando solo a uno? Pero tienes razón, votar negativamente esta respuesta es false (no era yo por cierto) - Raisch

Fui yo y estoy de acuerdo con @Raisch. El voto negativo se debe a que la respuesta aceptada es más rápida y solo llama a un objeto una vez. Estás llamando tres veces un objeto. Es bueno evitar cosas así para ganar tiempo de generación... - David Belanger

@DavidBélanger Voté a favor de la otra respuesta porque ambos tienen razón. Si mi respuesta fue incorrecta, entonces un voto negativo sería apropiado. No creo que enseñar microoptimización a alguien [relativamente] nuevo en PHP/CI sea una buena idea. De manera realista, no hay diferencia en el tiempo de ejecución entre las dos respuestas, para el sitio de un desarrollador de PHP/CI promedio... La principal diferencia entre las dos respuestas está la legibilidad; Diferentes desarrolladores podrían preferir diferentes estilos, entonces, ¿por qué se rechazaría un enfoque diferente [perfectamente válido]? No upvoting sería una mejor opción, en todo caso. - orourkek

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.