Requete tableaux croisés

Eléphant du PHP | 297 Messages

25 avr. 2015, 00:13

Bonjour, j'essaye de trouver une solution pour une requete speciale sur 2 tableaux, et je cale.
J'ai un tableau 1, base_contenu, contenant differents types de programme repas par jour (petit dej + dej + diner)
Image

puis un 2e tableau base_programme
Image
qui contient les combinaisons de repas sur une periode

Dans ma requete j'appelle la semaine 1 avec le code_semaine, et je souhaite donc retrouver dans les j1, j2, j3...le contenu correspondant.
Par exemple, en appelant s1, je souhaite afficher le programme repas de la semaine
j1 : petit dejeuner:jus d'orange + croissant - dejeuner: salade - diner:quiche
j2: petit dejeuner: cafe + pain - dejeuner:pizza - diner:jambon
j3: petit dejeuner: yaourt + cereale - dejeuner:dorade - diner:saumon
j4: petit dejeuner:jus d'orange + croissant - dejeuner: salade - diner:quiche
j5: petit dejeuner: cafe + pain - dejeuner:pizza - diner:jambon
j6: petit dejeuner: yaourt + cereale - dejeuner:dorade - diner:saumon
j7: petit dejeuner:jus d'orange + croissant - dejeuner: salade - diner:quiche

Est-ce possible ?

merci pour votre aide...

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

26 avr. 2015, 23:08

Bonjour,
Oui c'est possible car pour tout $code_contenu que tu as dans une journée exemple j1, tu peux exécuter une requête SELECT * FROM base_contenu WHERE code_contenu = '$code_contenu' pour récupérer les repas du jour et les afficher.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 297 Messages

27 avr. 2015, 03:18

bonjour,
merci pour votre réponse.
j'aimerai récupérer le programme repas de la semaine. Est-ce possible en une requete, ou dois je effectuer une requete pour chaque jour de la semaine ?
j'aimerai recuperer comme infos les 7 jours, j1,j2...et que chacun contiennent les 3 repas correspondant suivant le code contenu.

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

28 avr. 2015, 21:59

Salut, voici l'algorithme de la procédure à suivre :

Code : Tout sélectionner

Début du programme 0. Ouvrir une connexion avec la bas de données de travail 1. Exécuter une première requête : SELECT * FROM base_programme WHERE code_semaine = '$code_semaine' qui doit retourner un enregistrement correspondant à la semaine donnée par la variable $code_semaine 2. Lire le résultat de cette requête dans une variable $ligne qui représente donc un enregistrement de la table base_programme, c'est donc un tableau composé des champs de cette table. Soit : $ligne['id'], $ligne['code_semaine'], $ligne['j1'], $ligne['j2'], $ligne['j3'], $ligne['j4'], $ligne['j5'], $ligne['j6'] et $ligne['j7'] 3. On peut désormais commencer à afficher l'entête de la fiche du programme repas de la semaine ; Par exemple: Afficher ("Le programme repas de la semaine " + $code_semaine + " est : ") 4. En suite, pour afficher les repas des jours, on doit utiliser par exemple pour le jour 1 la requête SELECT * FROM base_contenu WHERE code_contenu = '$ligne[j1]' et ainsi de suite pour les autres jours. Mais pour simplifier l'exécution de cette rafale de requêtes jours, on peut utiliser une boucle de jour $j allant de 1 à 7, pour parcourir les variables : $ligne['j1'], $ligne['j2'], $ligne['j3'], $ligne['j4'], $ligne['j5'], $ligne['j6'] et $ligne['j7'] et les utiliser une par une dans la requête. Voici donc l'algorithme de cette étape 4: Boucle $j allant de 1 à 7 faire: $code_contenu = $ligne['j' + $j] Exécuter la requête : SELECT * FROM base_contenu WHERE code_contenu = '$code_contenu' Lire le résultat de la requête dans une variable $repas composée des champs : $repas['id'], $repas['code_contenu'], $repas['petit dejeuner'], $repas['dejeuner'], $repas['diner'] Afficher le repas de ce jour: Afficher ("Jour "+$j+" : Petit déjeuner : "+$repas['petit dejeuner']+" - Déjeuner : "+$repas['dejeuner']+" - Dîner : "+$repas['diner']) Répéter la boucle pour $j+1 Fin du programme.
Ce programme affiche donc après exécution pour $code_semaine= 's1', le résultat suivant:

Le programme repas de la semaine s1 est :
Jour 1 : Petit déjeuner : jus d'orange + croissant - Déjeuner : salade - Dîner : quiche
Jour 2 : Petit déjeuner : café + pain - Déjeuner : pizza - Dîner : jambon
Jour 3 : Petit déjeuner : yaourt + céréale - Déjeuner : dorade - Dîner : saumon
Jour 4 : Petit déjeuner : jus d'orange + croissant - Déjeuner : salade - Dîner : quiche
Jour 5 : Petit déjeuner : café + pain - Déjeuner : pizza - Dîner : jambon
Jour 6 : Petit déjeuner : yaourt + céréale - Déjeuner : dorade - Dîner : saumon
Jour 7 : Petit déjeuner : jus d'orange + croissant - Déjeuner : salade - Dîner : quiche

Voilà.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 297 Messages

29 avr. 2015, 12:50

Bonjour Sadeq et merci. Me voila rassuré sur la faisabilité de cette affichage.
J'ai bien compris l'esprit de ton programme.
Sur l'étape 2 et la variable, doit je mémoriser tous les champs en créant un tableau avec les fonctions while et array ?

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

29 avr. 2015, 19:46

Sur l'étape 2 et la variable, doit je mémoriser tous les champs en créant un tableau avec les fonctions while et array ?
Bonjour, non la variable $ligne se remplie automatiquement par la fonction de lecture $ligne = mysql_fetch_array($result) que tu écrit bien sûr comme ça en PHP:

Code : Tout sélectionner

// Début du Programme // Etape 0 : se connecter à la base nommée ma_base sur le serveur localhost mysql_connect('localhost', 'root', ''); mysql_select_db('ma_base'); // Etape 1 : Exécuter la requête qui retourne un enregistrement correspondant à la semaine donnée $code_semaine = isset($_GET['code_semaine']) ? $_GET['code_semaine'] : 's1'; $sql = "SELECT * FROM base_programme WHERE code_semaine = '$code_semaine'"; $result = mysql_query($sql); // Etape 2 : Lire le résultat de cette requête dans une variable $ligne while ( $result && $ligne = mysql_fetch_array($result) ){ //ici $ligne est un tableau qui contient automatiquement tous les champs de la table base_programme // écrire ici les étapes 3 et 4 } // Fin du Programme
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 297 Messages

25 févr. 2016, 21:36

Bonjour,
Merci pour ces réponses.
J'ai mis en place cette solution, mais je n'ai pas l'effet souhaité.
Ma connexion avec la base est bonne, car je peux réaliser un affichage simple d'une donnée de la base.
Par contre j'ai du mal à écrire le code pour l'affichage en boucle. Les étapes 3 et 4 de Sadeq. :?

J'ai écris/

Code : Tout sélectionner

$code = isset($_GET['code']) ? $_GET['code'] : 'S1'; $code_contenu = $ligne['j' + $j]; mysql_select_db($database_con..., $con...); $query_base_programme = "SELECT * FROM base_programme WHERE code = '$code_semaine'"; $base_programme = mysql_query($query_base_programme, $con...) or die(mysql_error()); $row_base_programme = mysql_fetch_assoc($base_programme); $totalRows_base_programme = mysql_num_rows($base_programme);
Je cale pour l'affichage. J'ai tenté plusieurs fois suivant les conseils de Sadeq, mais j'ai toujours une syntax error...

Merci si de votre aide.

Eléphant du PHP | 297 Messages

13 avr. 2016, 21:32

Bonjour,
Bon finalement, j'ai opté pour une solution plus simple avec inner join, en remaniant un peu mes tables.
merci qm