Miércoles 20 de Noviembre de 2024, 04:48
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación Web y Scripting
»
PHP
(Moderador:
F_Tanori
) »
Consulta A Varias Tablas
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Consulta A Varias Tablas (Leído 1974 veces)
neorent
Miembro MUY activo
Mensajes: 249
Consulta A Varias Tablas
«
en:
Lunes 8 de Octubre de 2007, 15:27 »
0
Estimado amigos de Solo codigos, tengo la siguente duda, resulta que me han encargado realizar una consulta la cual mediante unos check boxs, le permite a los usuarios seleccionar distintas tablas de una base de datos, el problema es que son 9 tablas y la unica relacion que pudiesen tener es el rut, entonces no tengo muy claro como generar la consulta, ya que no podria ser estatica, debido a que la seleccion de las tablas esta variando, yo estoy ocupando un codigo que me indico un usario antes con esto que es parecido, pero no se como generar el WHERE del SQL, espero que me puedan ayudar les dejo el codigo:
Este es el Consulta.php, donde selecciono las tablas.
Código: Text
<form name="b_tablas" method="post" action="b_tablas.php">
<table width="100%" border="1" align="center" cellpadding="0" cellspacing="0">
<tr>
<td colspan="9" align="center" class="Estilo6">MARQUE LOS RANGOS QUE DESEA BUSCAR</td>
</tr>
<tr>
<td>PATENTES</td>
<td>LICENCIAS DE CONDUCIR</td>
<td>PERMISOS DE CIRCULACIÓN</td>
<td>ASEO</td>
<td>RIM</td>
<td>ALUMNOS</td>
<td>APODERADOS</td>
<td>ORGANIZACIONES COMUNITARIAS</td>
</tr>
<tr>
<td><input type="checkbox" name="patentes" value="patentes" /></td>
<td><input type="checkbox" name="licencias" value="licencias" /></td>
<td><input type="checkbox" name="pci" value="pci" /></td>
<td><input type="checkbox" name="aseo" value="aseo" /></td>
<td><input type="checkbox" name="rim" value="rim" /></td>
<td><input type="checkbox" name="alumnos" value="alumnos" /></td>
<td><input type="checkbox" name="apoderados" value="apoderados" /></td>
<td><input type="checkbox" name="org_comunitarias" value="org_comunitarias" /></td>
</tr>
<tr>
<td colspan="9" align="center"><input name="Submit2" type="submit" class="Estilo6" value="Buscar"/>
<input name="Limpiar2" type="reset" class="Estilo6" id="Limpiar2" value="Limpiar" />
<input name="Volver2" type="button" class="Estilo6" id="Volver2" value="Volver" onclick="volver()" /></td>
</tr>
</table>
</form>
<script>
function volver()
{
setTimeout("<?php echo "location.href='menu.php'";?>", 1);
}
</script>
y aqui donde se supone que debo buscar
b_tablas.php
Código: Text
<?
//RECIBO VARIABLES LAS CUALES SERAN LOS NOMBRES DE LAS TABLAS
$patentes=$_POST['patentes'];
$licencias=$_POST['licencias'];
$pci=$_POST['pci'];
$aseo=$_POST['aseo'];
$rim=$_POST['rim'];
$alumnos=$_POST['alumnos'];
$apoderados=$_POST['apoderados'];
$org_comunitarias=$_POST['org_comunitarias'];
//FIN RECIBO DE VARIABLES
?>
<?
//ESTABLESCO CONEXION CON MI BASE DE DATOS
$link = mysql_connect("localhost","123","123");
mysql_select_db("db_clt_municipales",$link);
//FIN
?>
<?
//AQUI GENERO LA CONSULTA HASTA EL FROM
$sql="SELECT * ";
$from="FROM personal, ";
if($patentes<>NULL)$from.= "patentes, ";
if($licencias<>NULL)$from.= "licencias, ";
if($pci<>NULL)$from.= "pci, ";
if($aseo<>NULL)$from.= "aseo, ";
if($rim<>NULL)$from.= "rim, ";
if($alumnos<>NULL)$from.= "alumnos, ";
if($apoderados<>NULL)$from.= "apoderados, ";
if($org_comunitarias<>NULL)$from.= "org_comunitarias, ";
if($from<>"FROM ")
{
//eliminamos el último ", "
$from=substr($from,0,strlen($from)-2);
//concatenamos los criterios a la consulta
$sql.=" $from";
}
?>
Como veran solo llegue hasta el FROM del sql, y no se como hacer el resto, no pido que lo hagan solo que me digan que lo haga de alguna manera, muchas gracias por leer este post,
saludos a todos,
Neo.
Tweet
Un Tigre Nunka Kambia Sus Rayas
Avalon
Miembro MUY activo
Mensajes: 448
Re: Consulta A Varias Tablas
«
Respuesta #1 en:
Lunes 8 de Octubre de 2007, 16:25 »
0
Hola neorent. Puedes hacerlo usando
UNION
. Si el rut está presente en todas las tablas y suponiendo que el valor del rut lo tienes en una variable sería algo así
<!--php1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>
PHP
</td></tr><tr><td id='CODE'><!--ephp1--><code>[color= #000000]
[color= #0000BB]<?
[/color][color= #FF8000]//AQUI GENERO LA CONSULTA
[/color][color= #0000BB]$sql[/color][color= #007700]=[/color][color= #DD0000]"SELECT * FROM personal WHERE rut=$rut"[/color][color= #007700];
if([/color][color= #0000BB]$patentes[/color][color= #007700]<>[/color][color= #0000BB]NULL[/color][color= #007700])[/color][color= #0000BB]$sql[/color][color= #007700].= [/color][color= #DD0000]" UNION SELECT * FROM patentes WHERE rut=$rut"[/color][color= #007700];
if([/color][color= #0000BB]$licencias[/color][color= #007700]<>[/color][color= #0000BB]NULL[/color][color= #007700])[/color][color= #0000BB]$sql[/color][color= #007700].= [/color][color= #DD0000]" UNION SELECT * FROM licencias WHERE rut=$rut"[/color][color= #007700];
if([/color][color= #0000BB]$pci[/color][color= #007700]<>[/color][color= #0000BB]NULL[/color][color= #007700])[/color][color= #0000BB]$sql[/color][color= #007700].= [/color][color= #DD0000]" UNION SELECT * FROM pci WHERE rut=$rut"[/color][color= #007700];
...
...
}
[/color][color= #0000BB]?>
[/color]
[/color]
</code><!--php2--></td></tr></table><div class='postcolor'><!--ephp2-->
El código se puede optimizar pero la consulta resultante debería ser algo parecido a la almacenada en
$sql
Espero te sirva.
Salu2,
Avalon
neorent
Miembro MUY activo
Mensajes: 249
Re: Consulta A Varias Tablas
«
Respuesta #2 en:
Lunes 8 de Octubre de 2007, 16:47 »
0
claro seria muy buena idea, pero el rut no llega osea no me es entregado de ninguna forma y tampoco debe ser selecionado. Osea debe ser asi
tienes 9 tablas y 9 checbox, entonces segun las tablas que selecciones debes hacer lo siguiente, crear un SELECT * FROM tablas seleccionadas, donde la tabla que tenga mayor registros de la seleccionada debe ser comparada con las otras por el campo rut, osea imagina que seleccionas tres tablas
tabla1, tabla2 y tabla3, la tabla con mayor registros es la tabla3, tonces la consulta deberia quedar asi
SELECT * from tabla1, tabla2, tabla3 WHERE tabla3.rut = tabla1.rut AND tabla3.rut=tabla2.rut
el tema complicado es que no tengo ni la menor idea de como hacerlo por eso pregunto aca para ver si me pueden dar una idea y bueno agradesco mucho Avalon tu ayuda, espero que me puedan seguir ayudando desde ya muchas gracias,
saludos,
Neo.
Un Tigre Nunka Kambia Sus Rayas
Avalon
Miembro MUY activo
Mensajes: 448
Re: Consulta A Varias Tablas
«
Respuesta #3 en:
Lunes 8 de Octubre de 2007, 17:04 »
0
Ah, entiendo. En ese caso podrías hacerlo usando
LEFT JOIN
<!--sql--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>
SQL
</td></tr><tr><td id='CODE'><!--sql1-->[color=blue;font-weight]SELECT[/color] *
FROM
tabla1
LEFT
JOIN
tabla2 ON (tabla2.rut
=
tabla1.rut)
LEFT
JOIN
tabla3 ON (tabla3.rut
=
tabla1.rut) <!--sql2--></td></tr></table><div class='postcolor'><!--sql3-->
A ver si eso te sirve.
Salu2,
Avalon
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación Web y Scripting
»
PHP
(Moderador:
F_Tanori
) »
Consulta A Varias Tablas