Ver Mensaje Individual
  #1 (permalink)  
Antiguo 15/11/2011, 14:36
soyarzun
 
Fecha de Ingreso: noviembre-2011
Mensajes: 8
Antigüedad: 12 años, 5 meses
Puntos: 0
Consultar registros que no existan en otra tabla

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,2GROUP BY pu.Proyecto_idProyecto HAVING COUNT(*) >= 
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