IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Extraction de données while, foreach


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 10
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $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?

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    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.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 10
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    			$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 />";
    			}

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 74
    Par défaut
    Bonsoir,

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    foreach (range(1, 5) as $section) {
       // $section vaudra de 1 jusqu'à 5
    }

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Moi pour aller de 1 à 5 je ferrais plutot
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for ($i=1; $i<6;$i++) {
    }
    le tableau prend de la mémoire pour rien
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

Discussions similaires

  1. extraction des données- foreach
    Par ciel65 dans le forum Langage
    Réponses: 3
    Dernier message: 02/06/2007, 03h58
  2. [debutant] extraction de données
    Par tibpower dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 02/08/2004, 14h33
  3. Extraction de données sur des fichiers excel
    Par iupgeii dans le forum MFC
    Réponses: 3
    Dernier message: 23/01/2004, 13h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo