Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster -> FAQ BDD, Cours BDD et Sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 31/10/2009, 21h48   #1 (permalink)
Invité de passage
 
Date d'inscription: mars 2006
Messages: 9
Par défaut Extraction de données while, foreach

Bonjour à tous,

j'essaie d'extraire des données dans ma base de BDD et je n'y arrive pas.
Ma BDD est ouverte et prête pour l'extraction. voici un print_r de sa structure.

Array ( [id] => 849 [owner] => 580 [orderID] => 990 [title] => SELLING R/C AIRPLANE KITS & ARF COLLECTION [dateadded] => 2009-10-24 19:39:49 [TopNotified] => N [section] => 1 )



Je peux extraire les données en général avec ce code:

Code :
$sSQL = "SELECT p.id,p.owner,p.orderID,p.title,p.dateadded,TopNotified,p.section FROM ".PREFIX."listings AS p INNER JOIN ".PREFIX."users AS u ON p.owner=u.id WHERE display='Y' AND featured7 <> 'Y' AND notified <>'Y' ORDER BY section, dateadded DESC"; 
			$result=$db->query($sSQL);
			$numrows = $result->size();	
			while($rs=$result->fetch())
			{
				echo "ID = ".$rs['id']."<br />";
				echo "Owner = ".$rs['owner']."<br />";
				echo "Order ID = ".$rs['orderID']."<br />";
				echo "Title= ".$rs['title']."<br />";
				echo "Date = ".$rs['dateadded']."<br />";
				echo "Notified = ".$rs['TopNotified']."<br />";
				echo "Section = ".$rs['section']."<br />";
			}

Je reçois ceci:
ID = 1550
Owner = 939
Order ID = 1757
Title= Pilot Portraits: Pilots Figures For Your R/C Plane
Date = 2009-09-16 17:09:42
Notified = N
Section = 1

ID = 1448
Owner = 891
Order ID = 1635
Title= SMITH MINI PLANE
Date = 2009-08-23 12:38:20
Notified = N
Section = 1

ID = 1340
Owner = 218
Order ID = 1504
Title= Kaos 40 prêt à voler.
Date = 2009-08-03 21:24:17
Notified = N
Section = 1

Le trie de la BDD se fait sur les champs [section] et [dateadded]

Pour chaque [section], à partir du (ex: 30eme clients) de cette même [section ] j'aimerais les affichés.

J'ai essayé d'inclure un foreach dans le while mais je ne trouve pas la bonne façon.

voici un exemple plus concret:

j'ai une BDD de 500 clients dans 5 [section] différentes classées comme ceci:

Section 1 = 150 clients (Je veux afficher les 120 prochains clients de la section 1)
Section 2 = 40 clients (Je veux afficher les 10 prochains clients de la section 2)
Section 3 = 100 clients (Je veux afficher les 70 prochains clients de la section 3)
Section 4 = 60 clients (Je veux afficher les 30 prochains clients de la section 4)
Section 5 = 150 clients (Je veux afficher les 120 prochains clients de la section 5)

Comment travailler avec un foreach dans un while pour extraire les données voulus?
heldev est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 31/10/2009, 21h58   #2 (permalink)
Modérateur
 
Avatar de sabotage
 
Date d'inscription: juillet 2005
Messages: 10 018
Par défaut

Tu n'as pas bien compris ce que faisais foreach : foreach parcourt un tableau PHP.

Le plus simple pour faire ce que tu veux, c'est surement de faire une requete par section avec LIMIT pour avoir le bon nombre d'enregistrement.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 02/11/2009, 02h47   #3 (permalink)
Invité de passage
 
Date d'inscription: mars 2006
Messages: 9
Par défaut

Citation:
Envoyé par Sabotage
Le plus simple pour faire ce que tu veux, c'est surement de faire une requete par section avec LIMIT pour avoir le bon nombre d'enregistrement.
J'ai fait une requête par section en ajoutant limit et ça semble fonctionner. Est-ce que tu crois qu"il y aurait place à amélioration?

Code :
 
			$sSQL = "SELECT p.id,p.owner,p.orderID,p.title,p.dateadded,TopNotified,p.section FROM ".PREFIX."listings AS p INNER JOIN ".PREFIX."users AS u ON p.owner=u.id WHERE p.display='Y' AND p.featured7 <> 'Y' AND p.Topnotified <>'Y' ORDER BY p.section, p.dateadded ASC"; 
			$result=$db->query($sSQL);
			$numrows = $result->size();	
			while($rs=$result->fetch())
			{
				$i=0;
				$cat_list = $rs['section'];
				$sSQL1 = "SELECT p.id,p.owner,p.orderID,p.title,p.dateadded,TopNotified,p.section FROM ".PREFIX."listings AS p INNER JOIN ".PREFIX."users AS u ON p.owner=u.id WHERE display='Y' AND featured7 <> 'Y' AND notified <>'Y' AND section = '".$cat_list. "' ORDER BY section, dateadded ASC LIMIT 30,50"; 	
				$result1=$db->query($sSQL1);
				if ($cat_temp <> $cat_list)
				{
					while($rs1=$result1->fetch())
					{
							$i++;
						$cat_temp=$cat_list;
						$cat_list1=$rs1['section'];
					}
					echo "cat_list = $cat_list -- cat_list1 while2= $cat_list1 -- cat_temp= $cat_temp -- Compteur = $i <br />";
				}
					echo"ID= ".$rs['id']." -- Titre = ".$rs['title']." Section1 = ".$cat_list." -- Section2 = ".$cat_list1."<br />";
			}
heldev est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 03/11/2009, 00h06   #4 (permalink)
Nouveau membre du Club
 
Date d'inscription: janvier 2006
Localisation: Paris
Messages: 75
Envoyer un message via MSN à {Anthony}
Par défaut

Bonsoir,

Tu pourrais déjà remplacer ta première requête SQL par quelque chose comme :

Code :
 
$sql = "SELECT DISTINCT `section` FROM " . PREFIX . "listings";
 
Qui ne récupère QUE le champs section (celui qui t'intéresse) et sans doublons (grâce à l'option "DISTINCT").

Ou encore mieux si tu as un nombre de section pré-défini, par exemple tu sais que ça va de 1 à 5 et que ça ne change pas, tu peux te passer d'une requête SQL :

Code :
 
foreach (range(1, 5) as $section) {
   // $section vaudra de 1 jusqu'à 5
}
 
{Anthony} est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 03/11/2009, 00h21   #5 (permalink)
Modérateur
 
Avatar de sabotage
 
Date d'inscription: juillet 2005
Messages: 10 018
Par défaut

Moi pour aller de 1 à 5 je ferrais plutot
Code :
for ($i=1; $i<6;$i++) {
}
le tableau prend de la mémoire pour rien
sabotage est déconnecté   Envoyer un message privé Réponse avec citation
NEWS PHPFAQ PHPCours PHPSources PHPLivres PHPScripts PHPOutils PHPComparatifsZend Framework

Réponse Proposer ce sujet en actualité

Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non



Fuseau horaire GMT +1. Il est actuellement 23h48.


Vos questions techniques : forum d'entraide PHP - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Hébergement - Participez - Copyright © 2000-2010 www.developpez.com - Legal informations.