Utiliser un LIMIT pour paginer des résultats

Eléphant du PHP | 120 Messages

21 juil. 2006, 15:05

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 :)

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

21 juil. 2006, 15:07

modération : dans les réglements du forum, il est demandé d'utiliser un titre explicite. Merci de lire les réglements

Titre modifié
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 120 Messages

21 juil. 2006, 15:08

ok désolé :oops:

Eléphant du PHP | 120 Messages

21 juil. 2006, 16:25

//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 ;)