3 tables en une seule requête
Résolu
crocoscore
Messages postés
165
Date d'inscription
Statut
Membre
Dernière intervention
-
Meoran Messages postés 1562 Date d'inscription Statut Membre Dernière intervention -
Meoran Messages postés 1562 Date d'inscription Statut Membre Dernière intervention -
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 !
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 !
A voir également:
- 3 tables en une seule requête
- Ai suite 3 - Télécharger - Optimisation
- Comment imprimer un tableau excel sur une seule page - Guide
- Diviser une photo en 3 instagram - Guide
- Tables des matières word - Guide
- Mettre une seule page en paysage word - Guide
2 réponses
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 ;)
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 ;)
Voilà ce que j'ai fais :
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
}
}
$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
}
}
Pour afficher, j'ai trouver:
Maintenant, comment trier le tableau $tableau_trois_tables selon les timestamps contenu dans la colonne 3 ($tableau_trois_tables[$i][3]) ?
$tableau_trois_tables = array_merge($article, $nouvelle, $revue); $nombre_entree = count($tableau_trois_tables); echo $nombre_entree; for($i=0;$i!=$nombre_entree;$i++) { $type = $tableau_trois_tables[$i][0]; if($type == "article") { echo "Ahah"; } if($type == "nouvelle") { echo "Ouhouh"; } if($type == "revue") { echo "hihi"; } }
Maintenant, comment trier le tableau $tableau_trois_tables selon les timestamps contenu dans la colonne 3 ($tableau_trois_tables[$i][3]) ?
Re,
pour trier ton tableau :
foreach ($tableau_trois_tables as $key => $row) {
$date[$key] = $row[$key][3];
}
array_multisort($date, SORT_DESC, $tableau_trois_tables);
Pas sur que ça marche à cause de $row[$key][3], mais essaye quand même. Il peut également y avoir des problèmes de tri parce que c'est des dates.
Fais ensuite un print_r($tableau_trois_tables) et dis moi s'il est bien trié.
pour trier ton tableau :
foreach ($tableau_trois_tables as $key => $row) {
$date[$key] = $row[$key][3];
}
array_multisort($date, SORT_DESC, $tableau_trois_tables);
Pas sur que ça marche à cause de $row[$key][3], mais essaye quand même. Il peut également y avoir des problèmes de tri parce que c'est des dates.
Fais ensuite un print_r($tableau_trois_tables) et dis moi s'il est bien trié.
Bonjour, merci encore pour ton aide !
J'obtiens "Notice: Undefined offset" pour la ligne du $date[$key] = $row[$key][3]; et ça autant de fois que le nombre d'entrée du $tableau_trois_tables.
Avec un print_r($tableau_trois_tables), on peut voir que le tableau n'est absolument pas classé.
Effectivement, la table "revue" ne possède pas de timestamp mais je vais en ajouter un, parce que là $données['parution'] affiche soit Printemps 20** soit Automne 20**.
J'obtiens "Notice: Undefined offset" pour la ligne du $date[$key] = $row[$key][3]; et ça autant de fois que le nombre d'entrée du $tableau_trois_tables.
Avec un print_r($tableau_trois_tables), on peut voir que le tableau n'est absolument pas classé.
Effectivement, la table "revue" ne possède pas de timestamp mais je vais en ajouter un, parce que là $données['parution'] affiche soit Printemps 20** soit Automne 20**.
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à ^^
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à ^^
https://www.php.net/manual/fr/function.array-merge.php