Foros del Web » Programando para Internet » PHP »

Buscador con Inner Join replica informacion

Estas en el tema de Buscador con Inner Join replica informacion en el foro de PHP en Foros del Web. Me hierve la cabeza... tengo este pequeño buscador... que con una query sencilla funciona sin problema... /** * Definimos las variables a utilizar */ $buscar1 ...
  #1 (permalink)  
Antiguo 07/04/2015, 11:36
Avatar de Pabluster2  
Fecha de Ingreso: abril-2015
Mensajes: 3
Antigüedad: 9 años, 8 meses
Puntos: 0
Pregunta Buscador con Inner Join replica informacion

Me hierve la cabeza...

tengo este pequeño buscador... que con una query sencilla funciona sin problema...

/**
* Definimos las variables a utilizar
*/

$buscar1 = $_GET['num_int'];

/**
* Establecemos conexion con la DB
* llamando al archivo connect.php
*/
include("connect.php");

/**
* Definimos variables para cada uno de los datos a almacenar
*/

$query ="SELECT * FROM tbl_mv_eq WHERE Num_Interno LIKE '%$buscar1%' ORDER BY Num_Interno ASC";
$result = mysql_query($query);
echo include("buscar.html");
echo "<center>";
echo "<table border=1><tr><th>Num_Interno</th><th>Patente</th><th>Km</th><th>Gerencia</th><th>Sup_Int</th><th>Empresa_Area</th><th>Sn_Rf</th><th>Sn_DashBoard</th><th>Ejecutor</th><th>Fecha</th><th>Proceso</th><th>Comentarios</th></tr>";
while ($fila= mysql_fetch_row($result)) {
echo "<tr>";
for($i=0;$i<mysql_num_fields($result);$i++){
echo "<td>".$fila[$i]."</td>";
}
echo "</tr>";
}
echo "</table>";
echo "</center>";
?>


perooooooo cuando le inserto unos INNER JOIN en la consulta me replica los valores que quiero reemplazar..

lo modificado vendria siendo esto.

$query ="SELECT *
FROM tbl_mv_eq AS t1
INNER JOIN tbl_gerencia AS t2 ON t1.Gerencia=t2.id_gerencia
INNER JOIN tbl_sup_int AS t3 ON t1.Sup_Int=t3.id_supint
INNER JOIN tbl_empresa_area AS t4 ON t1.Empresa_Area=t4.tbl_empresa_area
INNER JOIN tbl_ejecutor AS t5 ON t1.Ejecutor=t5.tbl_ejecutor
INNER JOIN tbl_proceso AS t6 ON t1.Proceso=t6.id_proceso
WHERE Num_Interno
LIKE '%$buscar1%'
ORDER BY Num_Interno ASC";

La intencion del inner es hacer la lectura de la tabla para simples mortales..

Haber si me pueden dar una mano con esto...
  #2 (permalink)  
Antiguo 07/04/2015, 11:47
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Buscador con Inner Join replica informacion

Cita:
La intencion del inner es hacer la lectura de la tabla para simples mortales..
Los simples mortales no entienden la información que sale de un "SELECT * ..." con uso de INNER JOIN. Incluso los programadores expertos tienen confusiones con ellos.
Un INNER JOIN devuelve un registro por cada coincidencia que haya entre dos tablas dadas unidas por esa cláusula. Pero la cantidad de registros dependerá de la cardinalidad de la relación entre esas tablas.
Si tienes en la primera tabla 100 registros, y cada uno de esos registros se relaciona con 34 regstros de la segunda, la consulta entre dos tablas devolverá 3.400 registros no repetidos...

Pero hay que entender un detalle despecto al concepto de "no repetido" en BBDD: Dos registros cualesquiera son repetidos si y sólo si todos los campos entre ambos registros tienen exactamente el mismo valor. Si al menos uno de los campos no es idéntico al otro, eso en base de datos no es repetición de datos, aunque todos los demas campos sean iguales.

¿Se entiende?

Ahora bien supongamos que entre todas tus tablas hay una cardinalidad de 1:5, es decir, por cada uno de los registros de cada tabla, en la siguiente hay cinco registros relacionados (en SQL las tablas se leen de izquierda a derecha).
Suponiendo que sólo tuvieses cinco registros en la primera, tu query devolvería 5^6 registros, es decir 15.625 diferentes desde el punto de vista de las bases de datos. El problema de entendimiento es que todos los campos d ela primera tabla aparecerán 3.125 veces, los de la segunda 625, y así.
Pero eso no es un error. Es el resultado normal y esperado de un INNER JOIN.

¿Queda claro?

Los INNER JOIN no son para humanos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: buscador, fecha, html, join, mysql, replica, select, sql, tabla, variable
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:56.