Vous n'êtes pas identifié(e).
Bonsoir,
Je crois que je viens de comprendre ce que tu souhaites faire. Si j'ai bien compris, la table protéine recence toutes les proteines alors que les tables OCC_NVDC_PAR_DC et OCC_DC bien qu'elles utilisent en clé primaire la meme clé primaire de la table proteine c'est à dire l'id_prot d'une proteine, ne recensent respectivement qu'une partie des proteines contenues dans proteine, et tu souhaites lister l'ensemble des proteines contenues dans OCC_NVDC et OCC_DC classées par leur id_prot avec l'info dans quelle table des deux elles sont présentes. C'est bien ca? Je demande pour être sûr avant de travailler sur la réponse^^.
Bonsoir Jc,
Oui c'est exactement cela dans mon cas et je te remercie pour ta réponse et tes explications tres claires. C'est vrai que l'utilisation de UNION serait tres intéressante dans mon cas, j'y ai meme pensé pour etre honnete, mais cela m'a toujours posé des problemes pour l'affichage distintif des id_Prot. Ayant reflechi a des fonctions en PHP qui pourraient m'aider a traiter ces résultats, j'ai finalement trouvé une solution qui correspond exactement a ce que je voulais faire.
Voila le code que j'ai fait:
$req_Dom_Gen1= $db->query(("SELECT DISTINCT PROTEINE.organisme, PROTEINE.id_Prot, OCC_NVDC_PAR_DC.id_Prot FROM PROTEINE, OCC_NVDC_PAR_DC WHERE OCC_NVDC_PAR_DC.id_Dom = '$domaine' AND OCC_NVDC_PAR_DC.FDR <='$FDR' AND PROTEINE.id_Prot=OCC_NVDC_PAR_DC.id_Prot ORDER BY PROTEINE.organisme ASC"));
$res = $req_Dom_Gen->fetchAll(PDO::FETCH_COLUMN|PDO::FETCH_GROUP);
$res1 = $req_Dom_Gen1->fetchAll(PDO::FETCH_COLUMN|PDO::FETCH_GROUP);
foreach($res as $k=>$a) {
printf ('<h1>%s</h1>','<center><div style="color:#FF0000;">'.$k.'</center></div>');
echo '<ul>';
echo '<h2><center><div style="color:#0000FF;">Occurrences Connues:</h2></center></div>';
foreach ($a as $v) {
$id=substr($v,0,-1);
printf ('<li>%s</li>',"<center><"."<a href=\"http://www.lirmm.fr/~terrapon/coddDB/$id.html\">$id</a>"."></center>");
}
echo '</ul>';
echo '<h2><center><div style="color:#0000FF;">Nouvelles Occurrences:</h2></center></div>';
if (array_key_exists($k, $res1)) {
foreach ($res1 as $k1 => $a1) {
foreach ($a1 as $v1) {
if ($k1==$k)
{
$id1=substr($v1,0,-1);
printf('<li>%s</li>', "<center><"."<a href=\"http://www.lirmm.fr/~terrapon/coddDB/".$id1.".html\" >$id1</a>"."></center></div>");}
}
}
}
else {
echo "<h3><center>Aucune Nouvelle Occurrence trouvee pour cet organisme. Consulter les Bd de reference de ce domaine:</h3>";
foreach ($baseRef as $BD)
{
$nomBase=$BD['Bd_Native'];
$adresseDebut=$BD['adresseWebDom_debut'];
$adresseFin=$BD['adresseWebDom_fin'];
printf('<li>%s</li>',"<center><"."<a href=\"$adresseDebut.$domaine.$adresseFin\">$nomBase</a>"."></center>");
}
}
}
En tout cas je te remercie beaucoup pour ton aide, cela m'a été tres bénéfique. A tres bientot
Vu que les id_Prot de OCC_DC et de OCC_DC sont identiques à celle de PROTEINE pour chaque enregistrement, et du moins pour ce champs la tu peux par ex faire t1.id_Prot as ID1, t1.id_Prot as ID2,t1.id_Prot as ID3 par ex sans faire appel à tes autres tables. Mais il faut voir l'ensemble et il peut malgré tout être indispensable selon les cas de maintenir ces jointures.
En l'Etat actuel des choses, et dans la requête réunifiée que je te propose la table t2 peut être retirée sans aucune incidence sur le résultat.
Oui en effet, c'est ce que j'avais fait et dans mon code php, lorsque je fais un foreach du tableau que j'ai creé suite a ces requetes, je recupere parfaitement les id prot de OCC_DC par organisme (c'est ce que je voulais, cf mon code PHP du message précédent) mais je souhaite ajouter a cette liste, les id_Prot de la table OCC_NVDC_PAR_DC par organisme a la suite des id_Prot de la table OCC_DC mais de maniere distincte.
Dans le cas d'une requete unifiée par exemple, tu ferais comment un foreach pour parcourir les résultats de la requete pour afficher les 2 types d'id_Prot?
Merci encore.
Bonjour
Bien qu'il y ait des incohérences, par ex dans ta première requête, où tu fait une jonction avec une table dans laquelle tu ne récupère aucun champ à part un champ que tu as déjà avec la première table et donc tu te retrouves avec une jonction inutile*, voici la requête réunifiée sans tenir compte de ce que je viens de dire.
*PS: Sauf si tu utilises un RIGHT ou LEFT JOIN
[Code=MySQL]
$Req="SELECT DISTINCTROW t1.organisme, t1.id_Prot, t2.id_Prot, t3.id_Prot
FROM PROTEINE as t1, OCC_DC as t2, OCC_NVDC_PAR_DC as t3
WHERE t1.id_Prot=t2.id_Prot AND t1.id_Prot=t3.id_Prot AND t2.id_Prot='$domaine' and t3.id_Dom='$domaine' AND t3.FDR<='$FDR'
ORDER BY t1.organisme ASC";
[/Code]Voila
Bonjour,
Je te remercie pour ta réponse.
Si j'ai fait deux requetes séparées et non pas une seule unifiée, c'est que je dois ensuite récupérer les id_Proteine de la table OCC_DC et OCC_NVDC dans l'affichage mais de maniere distincte, c'est a dire, l'id_Prot de la table OCC_DC d'une part et l'id_Prot de la table OCC_NVDC d'autre part.
Comment pourrais_je faire la distintction dans l'affichage avec une requete unifiée?
Merci encore pour ton aide.
Bonjour,
Je me posais la question: si je veux regrouper les résultats de deux requetes différentes selon un meme attribut commun, est ce que c'est possible?
Par exemple (j'utilise PDO):
1ere requete:
2eme requete:
Et voici ce que j'ai essayé de faire pour regrouper les résultats selon l'attribut "organisme":
foreach ($res as $k => $a) {
printf ('<h1>%s</h1>','<center>'.$k.'</center>');
echo '<ul>';
echo '<h2><center>Occurrences Connues:</h2></center>';
foreach ($a as $v) {
$id=substr($v,0,-1);
printf ('<li>%s</li>',"<center><"."<a href=\"http://www.lirmm.fr/~terrapon/coddDB/".$id.".html\">".$id."</a>"."></center>");
}
echo '</ul>';
echo '<h2><center>Nouvelles Occurrences:</h2></center>';
foreach ($res1 as $k1 => $a1) {
foreach ($a1 as $v1) {
if($k1==$k)
{printf('<li>%s</li>', "<center><"."<a href=\"http://www.lirmm.fr/~terrapon/coddDB/".$v1.".html\" >".$v1."</a>"."></center>");}
}
echo '</ul>';
}
}
Mais cela n'affiche pas les résultats de la 2eme requete, seulement ceux de la 1ere (quand bien meme les 2 requetes marchent individuellement) et je ne vois pas vraiment ou est l'erreur
Avez vous une idée s'il vous plait?
Merci a vous.
NdM : Attention : la balise code sur phpdebutant est [ code=...] et non [ c]