Page 1 sur 1

Utiliser un LIMIT pour paginer des résultats

Posté : 21 juil. 2006, 15:05
par rakizm
je ne savais pas où mettre cette question, vous m'exuseraient si c'est pas le bon endroit.

bonjour à tous :) je vous expose mon pb:

cette fonction va chercher les utilisateurs d'un meme site et pour chaque utilisateur elle va chercher les "rqs" qu'il a fait. donc le résultat final est une liste de "rqs" appartenant à plusieurs utilisateurs.
je voudrai appliquer un LIMIT sur le résultat final!! comment faire

nb: c'est pour une pagination
//fonction pour obtenir les requetes faites par les utilisateurs d'un meme site 	
	function get_rqs($date,$subject,$min){
		$this->rqs = array();
		$users_dialog = array();
		$db = new DB_Sql();//objet de connection à la base
		$db->Database = DATABASE_NAME_APPS;
		$db->User     = DATABASE_USER_APPS;
		$db->Password = DATABASE_PASSWORD_APPS;
		$db->Host     = DATABASE_HOST_APPS;
		$sSQL = "SELECT id_user as id_user ".
				"FROM Emc_user ".
				"WHERE id_site = ".$this->id_site ;//requete qui cherche les utilisateurs d'un meme site
					
		$db->query($sSQL);
		$next_record = $db->next_record();
		while($next_record){
			$u=$db->f("id_user");
			//echo $u;
			array_push($users_dialog,$u);//tableau contenant les utilisateurs
			$next_record = $db->next_record();
		}
		foreach($users_dialog as $creator_user){
			$db = new DB_Sql();//objet de connection
			$db->Database = DATABASE_NAME;
			$db->User     = DATABASE_USER;
			$db->Password = DATABASE_PASSWORD;
			$db->Host     = DATABASE_HOST;
			$sSQL = "SELECT id_rqs as id_rqs ".
				"FROM km_request ";//requete qui cherche les request de chaque utilisateur
				if (($date=="") and ($subject==""))
					{$sSQL.="  WHERE rqs_creator_user = ".$creator_user ;}
				
				if (($date=="") and ($subject!==""))
					{$sSQL.="  WHERE rqs_subject LIKE '%".$subject."%' AND rqs_creator_user = ".$creator_user ;}
				
				if (($date!=="") and ($subject==""))
					{$sSQL.="  WHERE rqs_creation_date >='".$date." 00:00:00'  AND rqs_creator_user = ".$creator_user ;}
				
				if (($date!=="") and ($subject!==""))
					{$sSQL.="  WHERE rqs_creation_date >='".$date." 00:00:00' AND rqs_subject LIKE '%".$subject."%' AND rqs_creator_user = ".$creator_user ;}	
				if ($min)	
					{$sSQL.=" LIMIT ".$min.",15 ";}
			echo ($sSQL);
			$db->query($sSQL);
			$next_record = $db->next_record();
			while($next_record){
				$u=$db->f("id_rqs");
				//echo $u;
				array_push($this->rqs,$u);//tableau contenant toutes les requests 
				$next_record = $db->next_record();
			}
		}		
	}
ainsi fait ça ne marche pas parceque j'applique le LIMIT "n" fois où "n" est le nombre d'utilisateurs d'un meme site.

svp aidez moi :)

Posté : 21 juil. 2006, 15:07
par zeus
modération : dans les réglements du forum, il est demandé d'utiliser un titre explicite. Merci de lire les réglements

Titre modifié

Posté : 21 juil. 2006, 15:08
par rakizm
ok désolé :oops:

Posté : 21 juil. 2006, 16:25
par rakizm
//fonction pour obtenir les requetes faites par les utilisateurs d'un meme site 	
	function get_rqs($date,$subject,$min){
		$this->rqs=array();
		$users_dialog = array();
		$db = new DB_Sql();
		$db->Database = DATABASE_NAME_APPS;
		$db->User     = DATABASE_USER_APPS;
		$db->Password = DATABASE_PASSWORD_APPS;
		$db->Host     = DATABASE_HOST_APPS;
		$sSQL = "SELECT id_user as id_user ".
				"FROM Emc_user ".
				"WHERE id_site = ".$this->id_site ;
					
		$db->query($sSQL);
		$next_record = $db->next_record();
		while($next_record){
			$u=$db->f("id_user");
			//echo $u;
			array_push($users_dialog,$u);
			$next_record = $db->next_record();
		}
		$users_dialog=implode(",",($users_dialog));
		$db = new DB_Sql();
		$db->Database = DATABASE_NAME;
		$db->User     = DATABASE_USER;
		$db->Password = DATABASE_PASSWORD;
		$db->Host     = DATABASE_HOST;
		$sSQL = "SELECT id_rqs as id_rqs ".
				"FROM km_request WHERE rqs_creator_user IN ($users_dialog)  ";
				if (($date=="") and ($subject==""))
					{$sSQL.="";}
				
				if (($date=="") and ($subject!==""))
					{$sSQL.="  AND rqs_subject LIKE '%".$subject;}
				
				if (($date!=="") and ($subject==""))
					{$sSQL.="  AND rqs_creation_date >='".$date." 00:00:00'";}
				
				if (($date!=="") and ($subject!==""))
					{$sSQL.="  AND rqs_creation_date >='".$date." 00:00:00' AND rqs_subject LIKE '%".$subject;}	
				if ($min!=='')	
					{$sSQL.=" LIMIT ".$min.",15 ";}
			//echo ($sSQL);
			$db->query($sSQL);
			$next_record = $db->next_record();
			while($next_record){
			$u=$db->f("id_rqs");
			//echo $u;
			array_push($this->rqs,$u);
			$next_record = $db->next_record();
		}
			
			
				
	}
	
et voilà la solution merci quand meme ;)