PHP - Consulta de registros que estan en una tabla y no en otra

 
Vista:

Consulta de registros que estan en una tabla y no en otra

Publicado por sebastian (1 intervención) el 15/11/2011 21:40:50
Tengo una consulta con mysql y php donde deseo obtener los usuarios asociados a un proyecto, tengo unos campos checkbox por medio de un form donde listo los usuarios:

Código PHP:
<form action="graficos_colaboradores.php" method="post" id="fo3" name="fo3">
<table width="100%">
<?
if ($usuarios > 0) {

while ($usuario = mysql_fetch_object($consulta1)) {
?>
<tr class="intA" valign="top">
<td align="left"><h3><?= $usuario -> nombre
?></h3></td>
<td align="left"><? echo '<input type="checkbox" id="user" name="usuarios[]" value="' . $usuario -> idUsuario . '" style="margin: 0px" />';?></td>
</tr>
<? }?>
<tr>
<td colspan="2">
<input type="submit" name="button" id="button" value="Enviar" />
</td>
<? } else {?>
</tr>
<tr>
<td colspan="2">No hay colaboradores disponibles</td>
</tr>
<?
}
?>
</table>
</form>
este envia los datos mediante ajax-jquery:

Código HTML:
<script language="javascript">
$.noConflict();
jQuery(document).ready(function() {
// Interceptamos el evento submit
jQuery('#fo3').submit(function() {
// Enviamos el formulario usando AJAX
jQuery.ajax({
type : 'POST',
url : jQuery(this).attr('action'),
data : jQuery(this).serialize(),
// Mostramos un mensaje con la respuesta de PHP
success : function(data) {
jQuery('#result').html(data);
}
})
return false;
});
})
</script>
donde por php recibe el campo usuarios:

Código PHP:
$usuarios = $_POST["usuarios"];

for($i=0;$i<count($usuarios); $i++)
{
$consulta2 = $objUsuario->mostrar_usuario_participacion_22222($usuarios[$i]);

while($resultado=mysql_fetch_object($consulta2))
{
$idsproyectos[$resultado->idProyecto]++;
}


}
esto lo que hace es guardar los id proyectos y sumarle la cantidad de repeticiones por proyecto por cada usuario que recibo del checkbox
este llama al objeto usuario, a la funcion :

Código PHP:
function mostrar_usuario_participacion_22222($id) {
if ($this -> con -> conectar() == true) {

$sql = ("SELECT *
FROM proyecto_has_usuario pu
LEFT OUTER JOIN usuario u ON pu.Usuario_idUsuario = u.idUsuario
LEFT OUTER JOIN proyecto p ON pu.Proyecto_idProyecto = p.idProyecto
WHERE u.idUsuario = " . $id . "");

$resultado = mysql_query($sql);

if (!$resultado) {
die("Sql Invalido mostrar_usuario_participacion_22222 :" . mysql_error());

}
return $resultado;

}
}
lo que busca son los proyectos del usuario que envio en el for, aqui no hay problema me trae bien los datos.

ahora no si si lo estoy haciendo bien, pero sugiero ideas que me puedan inspirar para poder obtener los usuarios que estan en un proyecto, pero si me trae un usuario que no este no me muestre ningun dato por ejemplo en esta consulta:


Código PHP:
SELECT * FROM proyecto_has_usuario pu
LEFT OUTER JOIN usuario u ON pu.Usuario_idUsuario = u.idUsuario
LEFT OUTER JOIN proyecto p ON pu.Proyecto_idProyecto = p.idProyecto
WHERE u.idUsuario in (1,2) GROUP BY pu.Proyecto_idProyecto HAVING COUNT(*) >= 2
me trae los datos que el usuario 1 y 2 estan en los mismos proyectos pero si yo le pongo mas usuarios a esa consulta me sige tirando y arrojando mas proyectos por cada usuario q agrege, yo deseo que cuando haya un usuario 3 y no este en los mismo proyectos que 1 y 2 no me muestre ninguna informacion ya que no esta en el grupo de usuarios que estan dentro del proyecto. no se si me explique bien por favor si alguien me puede ayudar se lo agradeceria mucho!!!!!!!!!!!...


aqui tengo la funcion que me recibe el sql anterior:


Código PHP:
function mostrar_usuario_participacion_proyecto($id) {
if ($this -> con -> conectar() == true) {
if (count($id) == 1) {
for ($i = 0; $i < count($id); $i++) {
//echo $usuarios[$i];
$sql = ("SELECT *
FROM proyecto_has_usuario pu
LEFT OUTER JOIN usuario u ON pu.Usuario_idUsuario = u.idUsuario
LEFT OUTER JOIN proyecto p ON pu.Proyecto_idProyecto = p.idProyecto
WHERE u.idUsuario = " . $id[$i] . "");
}
} else {

//echo count($id);
$sql = "SELECT * FROM proyecto_has_usuario pu
LEFT OUTER JOIN usuario u ON pu.Usuario_idUsuario = u.idUsuario
LEFT OUTER JOIN proyecto p ON pu.Proyecto_idProyecto = p.idProyecto
WHERE u.idUsuario in (";
$s = 1;
for ($i = 0; $i < count($id); $i++) {

//echo count($id);
if (count($id) == $s) {
$sql .= " " . $id[$i] . ")";
} else {
$sql .= "" . $id[$i] . ",";
}

$s++;
}
$sql .= " GROUP BY pu.Proyecto_idProyecto HAVING COUNT(*) >= 2";

}
echo $sql;
$resultado = mysql_query($sql);

if (!$resultado) {
die("Sql Invalido mostrar_usuario_participacion_proyecto :" . mysql_error());

}
return $resultado;

}
}

por si me falta algo o si alguien por favor me puede ayudar ya que es urgente alguna idea :)
gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder