Diferencia entre revisiones de «Como ejecutar sentencia JOIN en un find() en KumbiaPHP Framework»

De KumbiaPHP Framework Wiki
(Página creada con 'La sentencia JOIN en SQL permite combinar registros de dos o más tablas en una base de datos relacional. En el Lenguaje de Consultas Estructurado (SQL), hay tres tipo de JOIN: ...')
 
Línea 144: Línea 144:
  
 
== Screenshots ==
 
== Screenshots ==
[[Archivo:screenshots.jpg]]
+
[[Archivo:Screenshots.jpg]]

Revisión del 22:11 25 sep 2009

La sentencia JOIN en SQL permite combinar registros de dos o más tablas en una base de datos relacional. En el Lenguaje de Consultas Estructurado (SQL), hay tres tipo de JOIN: interno, externo, y cruzado.

Debemos crear las dos tablas para realizar con el find unas consultas con el JOIN

Creamos Nuestras tablas y le agregamos registros

CREATE TABLE username(
  id int(11) NOT NULL AUTO_INCREMENT,
  username varchar(50) NOT NULL,
  usuario_id int(11) NOT NULL,
  PRIMARY KEY (id)
)

-- Volcar la base de datos para la tabla `username`

INSERT INTO username(`id`, `username`, `usuario_id`) VALUES
(1, 'lmarcano', 3),
(2, 'eperez', 1),
(3, 'jlinares', 0);


CREATE TABLE usuario(
  id int(11) NOT NULL AUTO_INCREMENT,
  nombres varchar(100) NOT NULL,
  departamento varchar(100) NOT NULL,
  PRIMARY KEY (id)
)

-- Volcar la base de datos para la tabla `usuario`

INSERT INTO usuario (`id`, `nombres`, `departamento`) VALUES
(1, 'Elena Perez', 'Administracion'),
(2, 'Carlos Beltran', 'Presidencia'),
(3, 'Luis Marcano', 'Auditoria');

Creando nuestros Modelos

Ahora creamos nuestros modelos [app]/models/username.php:

<?php

class Username extends ActiveRecord{

}
?>

[app]/models/usuario.php:

<?php

class Usuario extends ActiveRecord{
    
    public function getInnerJoin(){
        return $this->find('columns: usuario.id, nombres, departamento, username',
                           'join: inner join username on usuario.id = username.usuario_id');
    }
    
     public function getLeftJoin(){
        return $this->find('columns: usuario.id, nombres, departamento, username',
                           'join: left outer join username on usuario.id = username.usuario_id');
    }   

     public function getRightJoin(){
        return $this->find('columns: usuario.id, nombres, departamento, username',
                           'join: right outer join username on usuario.id = username.usuario_id');
    }

}
?>

Aqui mostramos los distintos metodos como podemos utilizar el find, para relacionar dos o mas tablas tablas en una consulta.

Creamos nuestro Controller

[app]/controller/usuario_controller.php:

<?php

class UsuarioController extends ApplicationController{
    
    public function index(){
    
    $this->inner = $this->Usuario->getInnerJoin();
    $this->left = $this->Usuario->getleftJoin();
    $this->right = $this->Usuario->getrightJoin();
    }
}

?>

Creamos nuestra Vista

[app]/views/usuario/index.phtml:

<h2>Consulta con el Inner Join</h2>
<center>
<table border='1'>
    <tr>
        <th>Username</th>
        <th>Nombre del Usuario</th>
        <th>Departamento</th>
    </tr>
    <?php foreach($inner As $i): ?>
    <? echo tr_color('#ff0000', '#fff')?>
    <td><?php echo $i->username ?></td>
    <td><?php echo $i->nombres ?></td>
    <td><?php echo $i->departamento ?></td>
    <?php endforeach; ?>
</table>
<br />
<h2>Consulta con el Left Outer Join</h2>
<table border='1'>
    <tr>
        <th>Username</th>
        <th>Nombre del Usuario</th>
        <th>Departamento</th>
    </tr>
    <?php foreach($left As $i): ?>
    <? echo tr_color('#ff0000', '#fff')?>
    <td><?php echo $i->username ?></td>
    <td><?php echo $i->nombres ?></td>
    <td><?php echo $i->departamento ?></td>
    <?php endforeach; ?>
</table>
<br />
<h2>Consulta con el Right Outer Join</h2>
<table border='1'>
    <tr>
        <th>Username</th>
        <th>Nombre del Usuario</th>
        <th>Departamento</th>
    </tr>
    <?php foreach($right As $i): ?>
    <? echo tr_color('#ff0000', '#fff')?>
    <td><?php echo $i->username ?></td>
    <td><?php echo $i->nombres ?></td>
    <td><?php echo $i->departamento ?></td>
    <?php endforeach; ?>
</table>
</center>

Screenshots

Screenshots.jpg