3 tables en une seule requête
Résolu/Fermé
crocoscore
Messages postés
165
Date d'inscription
dimanche 16 novembre 2008
Statut
Membre
Dernière intervention
3 février 2015
-
Modifié par crocoscore le 16/06/2011 à 14:56
Meoran Messages postés 1562 Date d'inscription vendredi 28 août 2009 Statut Membre Dernière intervention 8 avril 2015 - 21 juin 2011 à 13:22
Meoran Messages postés 1562 Date d'inscription vendredi 28 août 2009 Statut Membre Dernière intervention 8 avril 2015 - 21 juin 2011 à 13:22
A voir également:
- 3 tables en une seule requête
- Picasa 3 - Télécharger - Albums photo
- Comment faire une table des matières sur word - Guide
- Comment imprimer un tableau excel sur une seule page - Guide
- Qu'est ce qu'une femme fait 3 fois par jour et un homme une fois dans sa vie - Forum Loisirs / Divertissements
- Couper une photo en 3 - Guide
2 réponses
Meoran
Messages postés
1562
Date d'inscription
vendredi 28 août 2009
Statut
Membre
Dernière intervention
8 avril 2015
204
Modifié par Meoran le 16/06/2011 à 15:30
Modifié par Meoran le 16/06/2011 à 15:30
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 ;)
crocoscore
Messages postés
165
Date d'inscription
dimanche 16 novembre 2008
Statut
Membre
Dernière intervention
3 février 2015
5
Modifié par crocoscore le 16/06/2011 à 17:39
Modifié par crocoscore le 16/06/2011 à 17:39
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
}
}
crocoscore
Messages postés
165
Date d'inscription
dimanche 16 novembre 2008
Statut
Membre
Dernière intervention
3 février 2015
5
Modifié par crocoscore le 16/06/2011 à 21:09
Modifié par crocoscore le 16/06/2011 à 21:09
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]) ?
Meoran
Messages postés
1562
Date d'inscription
vendredi 28 août 2009
Statut
Membre
Dernière intervention
8 avril 2015
204
Modifié par Meoran le 16/06/2011 à 23:25
Modifié par Meoran le 16/06/2011 à 23:25
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é.
crocoscore
Messages postés
165
Date d'inscription
dimanche 16 novembre 2008
Statut
Membre
Dernière intervention
3 février 2015
5
Modifié par crocoscore le 17/06/2011 à 11:14
Modifié par crocoscore le 17/06/2011 à 11:14
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**.
Meoran
Messages postés
1562
Date d'inscription
vendredi 28 août 2009
Statut
Membre
Dernière intervention
8 avril 2015
204
Modifié par Meoran le 17/06/2011 à 21:23
Modifié par Meoran le 17/06/2011 à 21:23
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à ^^
crocoscore
Messages postés
165
Date d'inscription
dimanche 16 novembre 2008
Statut
Membre
Dernière intervention
3 février 2015
5
17 juin 2011 à 18:50
17 juin 2011 à 18:50
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
16 juin 2011 à 15:35
16 juin 2011 à 15:36
https://www.php.net/manual/fr/function.array-merge.php
16 juin 2011 à 15:46
16 juin 2011 à 15:48
16 juin 2011 à 15:51