3 tables en une seule requête [Résolu/Fermé]

Signaler
Messages postés
165
Date d'inscription
dimanche 16 novembre 2008
Statut
Membre
Dernière intervention
3 février 2015
-
Messages postés
1562
Date d'inscription
vendredi 28 août 2009
Statut
Membre
Dernière intervention
8 avril 2015
-
Bonjour,
Sur la page d'accueil de mon site, je souhaite afficher les 10~15 derniers ajouts, c'est-à-dire les dernières articles, les dernière nouvelles et les dernières revues. Ces trois derniers sont stockés dans 3 tables différentes, organisé ainsi : http://img4.hostingpics.net/pics/7024193tables.jpg

Peut importe si le nombre de nouvelles soit supérieur aux nombres de nouvelles et de revues (et réciproquement), je souhaite simplement afficher les derniers parus, selon leurs timestamps.


Merci d'avance !

2 réponses

Messages postés
1562
Date d'inscription
vendredi 28 août 2009
Statut
Membre
Dernière intervention
8 avril 2015
188
Salut,

le mieux est de faire trois requêtes différentes et de regrouper ensuite les résultats en php avec array_merge.

Puis de trier le tableau par date, et de prendre les 15 derniers ;)
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 76687 internautes nous ont dit merci ce mois-ci

Messages postés
165
Date d'inscription
dimanche 16 novembre 2008
Statut
Membre
Dernière intervention
3 février 2015
5
Pourquoi 0 ?

Tu ferais un très bon prof de PHP, merci :D


Arf, j'obtiens "Notice: Undefined offset: 3" avec un "echo $article[3][5];"
Messages postés
1562
Date d'inscription
vendredi 28 août 2009
Statut
Membre
Dernière intervention
8 avril 2015
188
Parce que l'index des tableaux php commence à 0 !

$arr = array(1,2,3,4);

echo $arr[0]; // 1
echo $arr[3]; // 4
Messages postés
165
Date d'inscription
dimanche 16 novembre 2008
Statut
Membre
Dernière intervention
3 février 2015
5
Justement, le while est une boucle donc il faut que les entrées s'auto-incrémentent.
Si la table article contient deux entrées, elles se remplacerons car elles auront la même clé, je me trompe ?
Messages postés
1562
Date d'inscription
vendredi 28 août 2009
Statut
Membre
Dernière intervention
8 avril 2015
188
Tu as vu le $i++ à la fin du while ?

Le $i =0 est situé en dehors de la boucle et $i s'incrémente à chaque tour de boucle. Tu ne peux donc pas écraser une donnée déjà présente ;)

Pour afficher l'ensemble du tableau $article, utilise la fonction : print_r($article).
Messages postés
165
Date d'inscription
dimanche 16 novembre 2008
Statut
Membre
Dernière intervention
3 février 2015
5
Je m'incline, le $i++ m'est échappée :P

Je vais tenter de coder, le reste. Je reviendrai quand j'aurais fini ou si je rencontre un problème.

Merci pour ton aide précieuse !
Messages postés
165
Date d'inscription
dimanche 16 novembre 2008
Statut
Membre
Dernière intervention
3 février 2015
5
Voilà ce que j'ai fais :
    $article = array (); 
    $i = 0; 
     
    $reponse = mysql_query('SELECT * FROM article ORDER BY id DESC LIMIT 0,10'); 
     
    while($données = mysql_fetch_array($reponse)) 
    { 
     $article[$i][0] = "article"; 
     $article[$i][1] = $données['id']; 
     $article[$i][1] = $données['titre']; 
     $article[$i][3] = $données['timestamp']; 
     $article[$i][4] = $données['texte']; 
     $article[$i][5] = $données['auteur']; 
      
     $i++; 
    } 
     
    $nouvelle = array (); 
    $i = 0; 
     
    $reponse = mysql_query('SELECT * FROM nouvelle ORDER BY id DESC LIMIT 0,10'); 
     
    while($données = mysql_fetch_array($reponse)) 
    { 
     $nouvelle[$i][0] = "nouvelle"; 
     $nouvelle[$i][1] = $données['id']; 
     $nouvelle[$i][1] = $données['titre']; 
     $nouvelle[$i][3] = $données['timestamp']; 
     $nouvelle[$i][4] = $données['contenu']; 
      
     $i++; 
    } 
     
    $revue = array (); 
    $i = 0; 
     
    $reponse = mysql_query('SELECT * FROM revue ORDER BY id DESC LIMIT 0,10'); 
     
    while($données = mysql_fetch_array($reponse)) 
    { 
     $revue[$i][0] = "revue"; 
     $revue[$i][1] = $données['id']; 
     $revue[$i][1] = $données['numero']; 
     $revue[$i][3] = $données['parution']; 
     $revue[$i][6] = $données['titre']; 
     $revue[$i][7] = $données['prix']; 
     $revue[$i][8] = $données['nom_couverture']; 
     $revue[$i][9] = $données['nom_sommaire']; 
     $revue[$i][10] = $données['parution']; 
      
     $i++; 
    } 
     
    $array_trois_tables = array_merge($article, $nouvelle, $revue); 


Maintenant, comment lister les entrées une par une ? J'ai essayer de faire avec foreach mais je sais pas exactement comment faire. Ensuite, on peut voir une la première valeur des entrées est soit "article", soit "nouvelle" ou soit "revue", est-il possible de faire comme ceci :

fonction_qui_liste
{
Si (valeur 1 == "article")
{
Instruction : Faire cette mise-en-page
}
Si (valeur 1 == "revue")
{
Instruction : Faire cette mise-en-page
}
Si (valeur 1 == "nouvelle")
{
Instruction : Faire cette mise-en-page
}
}
Messages postés
1562
Date d'inscription
vendredi 28 août 2009
Statut
Membre
Dernière intervention
8 avril 2015
188
Oui il faut absolument que les [$i][3] soit tous du même type !

Autrement il est toujours possible de formater le format reçu en un format standard mais bon, ça fait un algo de plus, et c'est pas forcément nécessaire alors que tu peux directement le faire dans la bd.

Je creuse le problème et je t'en reparle un peu plus tard, je suis au taf là ^^
Messages postés
165
Date d'inscription
dimanche 16 novembre 2008
Statut
Membre
Dernière intervention
3 février 2015
5
Ok, je vais modifier ajouter un timestamp à chacune de mes entrée de la table revue. J'en ai pour un petit moment, je passerai demain ou après demain
Messages postés
1562
Date d'inscription
vendredi 28 août 2009
Statut
Membre
Dernière intervention
8 avril 2015
188
Salut,

en effet toute petite erreur de ma part :

foreach ($tableau_trois_tables as $key => $row) {
$date[$key] = $row[3];
}

Le [$key] était inutile ;)

Testé chez moi cette fois-ci, et fonctionne parfaitement, même sur des dates ;)

Concernant les timestamp, oui c'est bien mieux ! En plus, grâce à une fonction, tu pourras quand même retrouver été, automne, hiver...
Messages postés
165
Date d'inscription
dimanche 16 novembre 2008
Statut
Membre
Dernière intervention
3 février 2015
5
Merci pour tout, ça marche !
Messages postés
1562
Date d'inscription
vendredi 28 août 2009
Statut
Membre
Dernière intervention
8 avril 2015
188
De rien ;)