Consulta MySQL Y Codeigniter

Tema en 'Programación & Programación Web' iniciado por Memo6112, 27 Jul 2014.

  1. Memo6112

    Memo6112 Usuario Nuevo nvl. 1
    37/41

    Registrado:
    28 Jun 2009
    Mensajes:
    628
    Me Gusta recibidos:
    2
    Programadores web.

    necesito de vuestra ayuda, resulta que estoy haciendo un proyecto para mi negocio y he pensado en php y mysql, con un framework mvc.

    he escogido codeigniter y creo que ha sido amor a primera vista, es realmente magnifico y la verdad es que aprender php es bastante facil y rapido.

    bueno, el problema es que tengo que meter esta consulta MySQL.

    Insertar CODE, HTML o PHP:
    SELECT
        GananciasDiar_Cod,
        Mes,
        Dia,
        Fecha,
        REPLACE(FORMAT(Efectivo, 0), ',','.') as Efectivo,
        REPLACE(FORMAT(Visa, 0), ',','.') as Visa,
        Cheque,
        REPLACE(FORMAT(Total, 0), ',','.') as Total,
        REPLACE(FORMAT(Acumulado, 0), ',','.') as Acumulado
    FROM `gananciasdiarias`;
    en la clase model de codeigniter, como ustedes bien conocen, tengo que meter esa consulta como string en esto :

    Insertar CODE, HTML o PHP:
               $this->db->select('aqui va la consulta');
               $this->db->from('gananciasdiarias');
    
    como ven la consulta esta compuesta por funciones de mysql, las cuales son REPLACE y FORMAT que sirven para darle un formato de salida a unas cifras numericas que tengo en la tabla, el problema es que esas funciones llevan comillas y comas que el metodo db->select() no toma como parte de la consulta.

    si pongo la consulta normal sin las funciones anda todo bien, pero necesito que la consulte arroje los resultados como yo quiero.

    si la pongo asi, funciona bien, que es lo que tengo por que la consulta filtra por mes y año.

    Insertar CODE, HTML o PHP:
    $this->db->select('GananciasDiar_Cod,'.
                              'Mes,'.
                              'Dia,'.
                              'Fecha,'.
                              'Efectivo,'.
                              'Visa,'.
                              'Cheque,'.
                              'Total,'.
                              'Acumulado',FALSE);
            $this->db->from('gananciasdiarias');
            $this->db->where("Mes = '".$mesabuscar ."'" . " and EXTRACT( YEAR FROM Fecha ) = '" .$agnoabuscar ."'");
    
    pero asi no me sirve por que en la tabla de php me salen los numeros asi : 345678 y yo necesito que salgan asi : 345.678 con su respectiva separacion de miles.

    y para eso necesito meter las funciones de mysql en la consulta en mi class model de codeigniter.


    espero que entiendan mi problema, sino edito y explico con mas detalles.

    pd: REPLACE Y FORMAT lo que hacen como ya dije antes es darle un formato de salida en la consulta a las cifras numericas que tengo en la base de datos, por ejemplo : si tengo la cifra 3456789, al hacer la consulta con REPLACE Y FORMAT me sale asi 3.456.789. Por que a mysql no puedo ingresar cifras con punto, la wea me da error.
     
    #1 Memo6112, 27 Jul 2014
    Última edición: 27 Jul 2014
  2. cavoso

    cavoso Usuario Casual nvl. 2
    37/41

    Registrado:
    31 May 2008
    Mensajes:
    2.792
    Me Gusta recibidos:
    14
    porque la gente tiende a complicarse la vida??, codeigniter tiene un manual para los usuarios de echo te enseña muchas cosas, yo lo tengo guardado en mis favoritos :D, bien aqui te lo dejo http://escodeigniter.com/guia_usuario/ es en español por si tienes pesimo ingles como yo xD, ahora respondiendote rapidamente tu pregunta, aparte de las funciones que ya indicaste, codeigniter tiene otra para consultas que es $this->db->query("aqui va tu consulta"); en la cual le puedes colocar la consulta directamente, super facil y practico cuando tienes que hacer cosas como joins, ahora para darle formato numero yo te recomiendo usar format() de php y no directamente en la consulta, y la razon es muy simple, la separacion de miles es una respuesta visual para el usuario, los sistemas informaticos no los utilizan por ende si vas a hacer algun canculo el sistema terminara confundiendose y no te realizara el calculo correcto, yo trabajo en sistema donde se implican muchos valores y lo que ago es simplemente que al momento de mostrar el valor al usuario le aplico format y asi queda para que el usuario lo vea con los separadores de miles mientras internamente el sistema puede calcular sin problemas.
     
  3. Memo6112

    Memo6112 Usuario Nuevo nvl. 1
    17/41

    Registrado:
    28 Jun 2009
    Mensajes:
    628
    Me Gusta recibidos:
    2
    compadre, xDDDD.

    en php cuando usted se encuentra con caracteres del tipo ' se deben sumar como lo hice en la parte del where donde sumo las comillas simples con el punto, en la documentacion de codeigniter he buscado, creeme que el problema no es tan simple como se ve.

    si tu ingresas la consulta directamente de esta forma, como tu dices cavoso.

    codeigniter arrojara el siguiente error, al ver el error se puede observar que:

    en el error que me arroja, no me toma las funciones como string si las encierro entre " " comillas dobles por que la funcion format y replace contienen comas y comillas simples, y las comillas simples para que sean tomadas como strings en php se deben encerrar entre comillas dobles y deben ser sumadas con el punto.

    aunque he intentado esto, tampoco me ha funcionado, xDD creeme que he consultado la guia, en español e ingles, estuve buscando en algunos foros y vi que algunos users metieron las consultas como arrays, pero tampoco he podido por que es una consulta con dos funciones, join tampoco sirve por que join se usa para unir tablas, yo no quiero unirlas por que es una consulta contra una sola tabla, no tiene relaciones con otras.

    creo que podria usar tu segunda idea que es usar la funcion de php format_number, me parecio muy buena idea.

    bueno gracias por la iluminacion cavoso, ya mas o menos cacho como solucionarlo.

    voy a aplicar la funcion format_number en el foreach que divide el resulset que me entrega codeigniter.

    me diste un punto, aplico solucion y te cuento como me fue.


    gracias compadre.

    -

    Perro vale por el consejo, acabo de usar la funcion de php en el resulset y voila.

    funciono filete loco.

    vale por todo.

    posteo la solucion, por si a alguien le puede llegar a pasar esto.

    Insertar CODE, HTML o PHP:
    foreach ($resulsetgan->result() as $fila) 
            {
                $this->table->add_row(
                $fila->Fecha,
                $fila->Dia,
                number_format($fila->Efectivo, 0, '', '.'),
                number_format($fila->Visa, 0, '', '.'),
                number_format($fila->Cheque, 0, '', '.'),
                number_format($fila->Total, 0, '', '.'),
                number_format($fila->Acumulado, 0, '', '.'));
            }
    
    gracias, me faltaba ese otro punto de vista.
     
    #3 Memo6112, 29 Jul 2014
    Última edición: 29 Jul 2014
  4. cavoso

    cavoso Usuario Casual nvl. 2
    37/41

    Registrado:
    31 May 2008
    Mensajes:
    2.792
    Me Gusta recibidos:
    14
    yo te decia que usaras $this->db->query("aqui va tu consulta"); ahi puedes usar sin problema cualquier consulta, las funciones que estabas usando son especificas para consultas simples donde consultas uno o 2 campos en una tabla en base a sus condicionales, yo uso solo query porque utilizo algunas funciones convinadas en algunas consultas y nunca he tenido problema