Cita:
Empezado por AgustinOrtu
Primero pregunta por Apellido, como mande nada, sige
Despues pregunta por Nombre, como mande Juan, agrega la sentencia SQL y el parametro
Despues hace lo del grupo, como le pedi los Casados, agrega la sentencia, pero me falta un AND en el medio, quien lo pone?
Si lo pongo despues de poner "Juan", como me aseguro que despues alguien va a poner algo despues de mi AND?
Y si antes de agregar lo del grupo, pongo un AND, como me aseguro que antes habia una condicion?
Yo lo termine solucionando a lo bestia, poniendo siempre el AND (u OR) al final, y despues sacandoselo a la ultima linea. A lo bestia si, pero hacer algo generico como decis vos, es bastante molesto
|
Quizá no estoy entendiendo el punto, pero a mi entender, el problema aquí está en querer construir el texto de la sentencia SQL secuencialmente sobre la marcha.
En lugar de tratar de ver si hay condiciones antes o después, mejor junta todas y, al final, armas la cláusula, si es que quedó algo. Por ejemplo,
Código PHP:
$condiciones = array(); // en este arreglo vamos a almacenar las posibles condiciones
if (!empty($nombre)) {
$condiciones[] = "nombre like $nombre"; // agregamos la condicón del nombre
}
if (!empty($grupos)) {
$condiciones[] = "grupo in $grupos"; // agregamos la condición de grupos
}
if (!empty($edad)) {
$condiciones[] = "edad > $edad"; // agregamos la condición de edad
}
Cada condición se agrega sin necesidad de saber si antes o después hay otra. Entonces, al final, sólo miramos si el arreglo de condiciones está vacío y, si no lo está, aglutinamos los elementos del arreglo con un AND:
Código PHP:
$whereStr = "";
if (!$empty($condiciones)) {
$whereStr = ' WHERE ' . implode(' AND ', $condiciones); // cláusula where + las condiciones aglutinadas
}
El ejemplo está en PHP para fastidiar un poco a Mario,
, pero puede adaptarse. Lo esencial es:
- Recabar las condiciones de forma independiente
- Armar la consulta una vez que todas las condiciones estén recabadas.
// Saludos