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

Messages postés
165
Date d'inscription
dimanche 16 novembre 2008
Statut
Membre
Dernière intervention
3 février 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 !
Afficher la suite 

2 réponses

Meilleure réponse
Messages postés
1565
Date d'inscription
vendredi 28 août 2009
Statut
Membre
Dernière intervention
8 avril 2015
179
1
Merci
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 ;)

Dire « Merci » 1

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

CCM 70239 internautes nous ont dit merci ce mois-ci

crocoscore
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];"
Meoran
Messages postés
1565
Date d'inscription
vendredi 28 août 2009
Statut
Membre
Dernière intervention
8 avril 2015
179 -
Parce que l'index des tableaux php commence à 0 !

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

echo $arr[0]; // 1
echo $arr[3]; // 4
crocoscore
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 ?
Meoran
Messages postés
1565
Date d'inscription
vendredi 28 août 2009
Statut
Membre
Dernière intervention
8 avril 2015
179 -
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).
crocoscore
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
0
Merci
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
}
}
Meoran
Messages postés
1565
Date d'inscription
vendredi 28 août 2009
Statut
Membre
Dernière intervention
8 avril 2015
179 -
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à ^^
crocoscore
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
Meoran
Messages postés
1565
Date d'inscription
vendredi 28 août 2009
Statut
Membre
Dernière intervention
8 avril 2015
179 -
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...
crocoscore
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 !
Meoran
Messages postés
1565
Date d'inscription
vendredi 28 août 2009
Statut
Membre
Dernière intervention
8 avril 2015
179 -
De rien ;)