Vous n'êtes pas identifié(e).
Bonjour à tous,
j'ai le code suivant:
Tout fonctionne bien et cela me génère mes résultats sous forme de tableau.
cependant comme j'ai plusieurs WP_objectifs, les premières infos de la ligne sont parfois similaires sur plusieurs lignes.
comment puis je procéder afin que ces premiers champs puissent être fusionnés??
Hors ligne
j'ai réussi à avancer un peu en bidouilllant
ceci étant dit :
1) cela ne doit pas etre un codage parfait
2) cela ne me permet pas de fusionner les lignes des 5 premières colonnes
En effet le nombre de ligne à fusionner depend du nombre d'objectifs...
Hors ligne
RE-bonjour,
personne pour m'éclairer?
j'ai également essayer avec des arrays mais peut importe comment je m'y prend, cela ne fonctionne pas...
please help
Hors ligne
Saluton,
C'est, classiquement, ce que l'on appelle une gestion de rupture dans le parcours séquentiel d'une liste, d'un tableau.
Cela requiert que la liste soit classée sur le critère de rupture, bien entendu.
Il suffit donc de gérer un drapeau sur la valeur du critère de rupture pour ne le prendre en compte que la première fois qu'il apparaît.
Technique de base d'algorithmique , mon cher Darkangel.
Même le vieux MK s'en souvient, c'est te dire.
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Bonjour Maljuna,
merci pour ce retour.
je vais donc regarder ce sytème de gestion que je ne connais pas, donc impossible de m'en souvenir
Aurais tu un lien pertinent à me conseiller? A défaut, je vais aller voir mon ami google
Hors ligne
Je ne trouve rien à a ce sujet..
j'ai beau tester avec toutes les formules que je peux trouver rien ne fonctionne...
Dernière modification par Darkangel (26-11-2013 16:47:33)
Hors ligne
Tu n'étais pas très loin du résultat. Ton drapeau c'est $a simplment il faut lui affecter la nouvelle valeur au bon endroit
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Bonjour Maljuna,
je n'arrivais à rien avec mon script précédent et la variable $a ne changeait rien.
j'ai donc revu intégralement ce script autrement mais ai de nouveau un problème assez basique.
echo '<table border="1">
<caption> WP du projet '.$acronyme.' </CAPTION>
<tr>
<th> WP nb</th>
<th> WP type </th>
<th> WP titre </th>
<th> WP start </th>
<th> WP end </th>
<th> WP objectif</th>
</tr>';
for ($i=0; $i<$result; $i++) {
$wp_objectifs = $Projet->wp_objectif($acronyme, $i);
echo ' <tr>
<th>'.$wp[$i]["WP_nb"].'</th>
<td>'.$wp[$i]["WP_type"].'</td>
<td>'.$wp[$i]["WP_titre"].'</td>
<td>'.$wp[$i]["WP_start"].'</td>
<td>'.$wp[$i]["WP_end"].'</td>
<td>';
$total_nb = count ($wp_objectifs) ;
for ($j = 0; $j < $total_nb; $j++) {
echo '- '.$wp_objectifs[$j]["WP_objectif"].'<br />';
}
echo' </td></tr> ';
}
echo '</table>';
Mon problème est désormais que mes objectifs sont décalés d'une ligne et que les derniers objectifs n'apparaisse donc pas.
j'ai beau tenter de changer les valeurs de $i ou $j mais cela ne fonctionne quand même pas...
une idée d'où pourrait provenir cette erreur?
merci par avance
Hors ligne
Re-bonjour,
Après avoir cogité et testé différentes choses j'ai réglé le soucis, mais j'aimerais comprendre le pourquoi de ce problème.
Afin que cela fonctionne (code ci-dessous), j'ai du bidouiller les $i $j etc.
exemple j'ai du mettre: $j = $i-1 pour reprendre $i plus loin... bizarre quand même...
$wp_objectifs = $Projet->wp_objectif($acronyme, $i);
$total_nb = count ($wp_objectifs);
for ($d = 0; $d < $total_nb; $d++) {
echo '- '.$wp_objectifs[$d]["WP_objectif"].'<br />';
}
sachant qu'en terme de formule j'ai
$query = $pdo->prepare($sql);
$query->execute();
if($wp = $query->fetchAll()){ return $wp;}
$query->closeCursor();
}
et
public function wp_objectif($acronyme,$wpnb)
{
$pdo= DbConnexion::getInstance();
$sql = '
SELECT WP_objectif
FROM infos_gen_projets AS igp
LEFT JOIN projet_wp AS pwp
ON pwp.id_Projet = igp.id_Projet
INNER JOIN projet_wp_objectifs AS pwo
WHERE igp.IG_acronyme = "'.$acronyme.'"
AND pwp.WP_nb ="'.$wpnb.'"
AND pwo.id_wp = pwp.id_wp
';
//echo $sql.'<br />';
$query = $pdo->prepare($sql);
$query->execute();
if($wp_obj = $query->fetchAll()){ return $wp_obj;}
$query->closeCursor();
}
A noter tous mes id dans ma base commence à 1!
donc je n'explique pas le pourquoi....
si quelqu'un pouvait m'éclairer afin que je puisse comprendre, je l'en remercie par avance!
Hors ligne
Bonjour,
j'ai du mettre: $j = $i-1 pour reprendre $i plus loin... bizarre quand même...
Non c'est normal, vous auriez pu vous éviter de mettre $j=$i-1; en modifiant votre boucle comme suit
car si count($result)=$n, votre resultset représente un tableau allant de $result[0] à $result[$n-1], ce qui représente bien un tableau de $n valeurs.
++
Dernière modification par Jc (01-12-2013 01:04:05)
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
Bonjour le problème n'est pas aussi simple car si je fais cela les lignes sont décalées:
En effet la première partie des lignes avec $i ne colle plus avec $j
Hors ligne
C'est bien de lire, mais c'est bien aussi de comprendre^^
Donc je vais réexpliquer, en remplaçant la boucle comme je vous l'ai dit,
1) vous n'avez plus besoin de $j dans votre code.
2) Ensuite il va de soi qu'il vous faille remplacer
qui de toute manière était erroné par
Car le deuxième paramètre de la fonction wp_objectif sert de condition where à votre requête et doit donc correspondre à un wp_nb valide.
Mais bon faire de l'itératif object quand on peut faire cela en une seule requête en relationnel avec votre SGBDR, c'est du contre-productif au possible.
++
Dernière modification par Jc (01-12-2013 13:26:11)
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
Merci a vous pour vos explications.
Je tenterai de modifier le code avec vos recommendations afin de tester.
J'ai procédé comme ceci car je n'arrivais pas à créer la fonction tout combiné en une dans ma classe...
Hors ligne
Merci JC pour vos solutions qui ont fonctionées.
Après relecture et considération de vos retours, cela parait logique que cela ne pouvait fonctionner avant directement.
Pour aller jusqu'au bout, je souhaite désormais pouvoir bénéficier de votre savoir-faire pour éviter d’être
"contre-productif au possible"
La fonction que j'avais développer initialement était:
$query = $pdo->prepare($sql);
$query->execute();
if($wp = $query->fetchAll()){ return $wp;}
$query->closeCursor();
}
néanmoins celle-ci ne récupère que les premières informations et non les objectifs qui peuvent être plusieurs par WP.
je ne sais pas comment ajouter à cette requête le fait d'aller chercher les plusieurs objectifs qui sont dans une autre table (via je pense une boucle mais dans une requete...)
C'est donc pour cela que j'ai créer une deuxime fonction de récupération des objectifs:
$sql = '
SELECT WP_objectif
FROM infos_gen_projets AS igp
LEFT JOIN projet_wp AS pwp
ON pwp.id_Projet = igp.id_Projet
INNER JOIN projet_wp_objectifs AS pwo
WHERE igp.IG_acronyme = "'.$acronyme.'"
AND pwp.WP_nb ="'.$wpnb.'"
AND pwo.id_wp = pwp.id_wp
';
$query = $pdo->prepare($sql);
$query->execute();
if($wp_obj = $query->fetchAll()){ return $wp_obj;}
$query->closeCursor();
}
Merci par avance de bien vouloir m'expliquer comment pouvoir procéder afin de combiner ces deux fonctions....
Hors ligne
Bonjour,
Pourrais-t-on avoir un SHOW CREATE TABLE sur les tables concernées svp?
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
Bonjour JC,
Voici le show create table demandé sur les tables concernées:
-- --------------------------------------------------------
--
-- Structure de la table `projet_wp`
--
CREATE TABLE IF NOT EXISTS `projet_wp` (
`id_Projet` int(11) NOT NULL,
`id_wp` int(11) NOT NULL AUTO_INCREMENT,
`WP_nb` tinyint(2) NOT NULL,
`WP_type` tinytext NOT NULL,
`WP_titre` text NOT NULL,
`WP_start` tinyint(2) NOT NULL,
`WP_end` tinyint(2) NOT NULL,
`WP_leader` tinyint(2) NOT NULL,
PRIMARY KEY (`id_wp`),
KEY `id_Projet` (`id_Projet`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=15 ;
-- --------------------------------------------------------
--
-- Structure de la table `projet_wp_objectifs`
--
CREATE TABLE IF NOT EXISTS `projet_wp_objectifs` (
`id_object` int(11) NOT NULL AUTO_INCREMENT,
`id_wp` int(11) NOT NULL,
`WP_objectif` text NOT NULL,
PRIMARY KEY (`id_object`),
KEY `wp_id` (`id_wp`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=46 ;
--
-- Contraintes pour les tables exportées
--
--
-- Contraintes pour la table `projet_wp`
--
ALTER TABLE `projet_wp`
ADD CONSTRAINT `projet_wp_ibfk_1` FOREIGN KEY (`id_Projet`) REFERENCES `infos_gen_projets` (`id_Projet`) ON DELETE CASCADE ON UPDATE CASCADE;
--
-- Contraintes pour la table `projet_wp_objectifs`
--
ALTER TABLE `projet_wp_objectifs`
ADD CONSTRAINT `projet_wp_objectifs_ibfk_1` FOREIGN KEY (`id_wp`) REFERENCES `projet_wp` (`id_wp`) ON DELETE CASCADE ON UPDATE CASCADE;
merci par avance pour ton aide
Hors ligne
Merci pour votre retour.
Ouch! Votre 2 requête pour récupérer l'ensemble des objectifs par id_wp n'est pas du tout pertinente, pour ne pas dire tout simplement fausse.
Etant donné que les DF sur votre schéma ne sont pas toutes exprimées, pourriez-vous me donner, pour terminer et me permettre de vous répondre, la définition de la colonne "wp_nb"?
++
Dernière modification par Jc (05-12-2013 20:46:23)
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
Bonsoir,
La colonne wp_nb n'est pas du tout un id, il s'agit d'une colonne indiquant le numéro du work-package d'un projet. Celui ci ne dépasse jamais deux chiffres.
Cordialement
Hors ligne
Bonjour,
La colonne wp_nb n'est pas du tout un id, il s'agit d'une colonne indiquant le numéro du work-package d'un projet. Celui ci ne dépasse jamais deux chiffres.
Il n'y a donc pas de dépendance fonctionnelle (DF) entre un wp_nb et un objectif. Donc d'obtenir les objectif d'un id_wp à partir de wp_nb ne sert à rien.
Voici la requête globale.
++
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
Bonjour Jc,
Merci pour votre retour, vos explications et votre script corrigé.
je ne comprends toutefois pas votre commentaire: Il n'y a donc pas de dépendance fonctionnelle (DF) entre un wp_nb et un objectif.
si car un wp_nb peut avoir plusieurs objectifs et c'est même souvent le cas.
j'ai testé votre script et cela affiche bien les objectifs du WP1 du projet
mais pas les autres... normal car l'array généré quand je fais count ne donne qu'1 alors que dans le projet testé j'en est 7
et
Hors ligne
Bonjour,
si car un wp_nb peut avoir plusieurs objectifs et c'est même souvent le cas.
Je me fie à votre modèle de données, et votre modèle de données dit qu'il n'y en a pas.
Je vous pose donc la question suivante : votre WP1 dans votre exemple peut-il appartenir à plusieurs projets?
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
chaque projet a un WP1, WP2 etc.
mais chaque projet n'a qu'un seul wp1 etc.
Hors ligne
Vous n'avez pas compris ma question. Est-ce que le wp1 du projet A et le wp1 du projet B peuvent être les mêmes?
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
Bonjour
j'ai testé votre script et cela affiche bien les objectifs du WP1 du projet
mais pas les autres... normal car l'array généré quand je fais count ne donne qu'1 alors que dans le projet testé j'en est 7
En fait après avoir relu votre citation, les 7 objectifs que vous aviez avant correspondent, d'après votre modèle, à l'ensemble des objectifs associés à votre projet dont celui dont dépends votre wp1.
Si vous regardez bien, même si votre count ne donne qu'1, l'ensemble des objectifs associés au projet sont concaténés et séparés par le caractère '|' dans la colonne 'objectifs' de votre array. Pour les récupérer il vous suffit de faire un explode() sur la colonne.
Merci toutefois de me répondre à la question précédente.
++
Dernière modification par Jc (06-12-2013 18:38:18)
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
Non le wp1 du projet a ne peut être le même que le wp1 du projet b car deux projets distincts en tout point!
Il y a dans mon exemple de projet ici 7wp avec plusieurs objectifs pour certains et d'autres qu'un!
Quand je texte votre script je ne récupère que les objectifs du wp1..
Hors ligne