|
Publicité | ||||||||||||||||||||||
|
|
#1 (permalink) |
|
Invité de passage
![]() Nom : Besky
Date d'inscription: janvier 2010
Messages: 5
|
Bonjour, je pense avoir déja bien détaillé ce que je souhaitais dans le titre mais bien entendu je vais vous faire un petit topo de ce que je voudrais trouver.
je souhaiterais afficher sur la page d'accueil de l'administration de mon site les dernières activités des utilisateurs sur le site. J'ai trois tables que je souhaites utiliser dans phpmyadmin et je fais une requête pour récupérer les données de ces trois tables. Mon problème: Je voudrais afficher ces données différemment selon qu'elles viennent d'une table ou d'une autre. Mes trois tables sont: NEWS (id, publier, pseudo, titre, contenu, devellopement, timestamp) COM_NEWS (id, id_news, pseudo, commentaire, timestamp, valide) LIVREOR (id, pseudo, message, mail, timestamp) Pour les données de "LIVREOR" je souhaiterais l'afficher tel que: - Nouveau message sur le livre d'or de "PSEUDO" le "DATE" à "HEURE". Pour celles de "NEWS": - Nouvel article de "PSEUDO" le "DATE" à "HEURE": "TITRE". Et pour "NEWS_COM" - Nouveau commentaire sur l'article: "TITRE" de "PSEUDO" le "DATE" à "HEURE". Code :
<?php // Connection à la BDD $link = mysql_connect("bases.sql", "mon_identifiant", "mon_mot_de_passe"); mysql_select_db("ma_base_de_donnees"); $requete = mysql_query("SELECT * FROM news, com_news, livreor ORDER BY timestamp DESC LIMIT 0,20") or die(mysql_error()); while ($activites = mysql_fetch_array($requete)) { ?> // ICI je ne sais pas quoi faire pour séparer les données par table. <?php } - Nouvel article... - Nouveau commentaire... - nouvel article... - Nouveau message sur le livre d'or... - Nouveau message sur le livre d'or... - Nouveau commentaire... Donc uniquement par ordre de date et heure. Si quelqu'un pouvais me dire s'il existe un terme en PHP qui permet de spécifier lors d'une condition de type "if" qu'on veut tel ou tel table genre: if (table == news) { blabla } Je lui en serait très reconnaissant. Merci d'avance de vos réponse et n'hésitez pas à me dire si je me suis mal exprimé. |
|
|
|
|
|
#2 (permalink) |
|
Nouveau membre du Club
![]() Date d'inscription: janvier 2008
Messages: 79
|
Regarde du côté des jointures. Tu trouveras certainement ton bonheur.
Mais tu sembles surtout avoir un problème dans la conception de tes tables au départ... Enfin, sinon, tu peux toujours faire 2 requetes... voir trois... parce que je t'avoue ne pas très bien voir la relation qu'il existe entre tes news et ton livre d'or. Cordialement, Patouche |
|
|
|
|
|
#3 (permalink) | |
|
Invité de passage
![]() Nom : Besky
Date d'inscription: janvier 2010
Messages: 5
|
Aucun rapport en effet.
Citation:
Pour les ""deux requêtes voir trois le problème est que je ne pourrais donc (à ma connaissance) pas mettre mes "évènement" à la suites classé par ordre de temps mais je serais obligé de séparer par catégories du genre "derniers articles", "derniers commentaires", "dernier messages sur le livre d'or". Ce que je ne souhaite pas. Merci quand même patouche. D'autres idées ? |
|
|
|
|
|
|
#4 (permalink) |
|
Nouveau membre du Club
![]() Date d'inscription: janvier 2008
Messages: 79
|
Pardon, j'avais pas du tout compris ton problème....
Donc, si je comprends bien, tes utilisateurs ont les même pseudo sur chacune des tables.... Dans ce cas la... fais toi des jointures sur le pseudo et fait un GROUP BY pseudo. Normalement, tu auras ce que tu souhaiteras.... Cordialement, Patouche PS : Désolé, je n'avais vraiment pas compris ton problème. |
|
|
|
|
|
#5 (permalink) |
|
Membre émérite
![]() ![]() Date d'inscription: novembre 2004
Localisation: Paris
Âge: 31
Messages: 745
|
Première solution et la plus "normale", comme l'a expliqué patouche, plusieurs requetes ( order by date limit 20) .
Ensuite à charge au php de regrouper les éléments et de les ordonnés par timestamp ( vulgaire tri d'un tableau ) Deuxième solution, utilisation d'un union sur chaque table mais dès qu'il y aura du volume les requêtes vont devenir de plus en plus lentes à moins d'introduire une clause sur la date ( genre timestamp < 48h ) La première solution, est la plus pratique, de cette façon, on ne mélange pas tout. La deuxième devenant problématique avec la taille de la bdd. Ta solution de mélanger les trois tables ne me semble pas élégante. car elle revient à mélanger les torchons et les serviettes, ce qui n'est jamais bon. Il y a encore une autre solution, un trigger sur chaque table, récupérant chaque insert pour le mettre dans une table DERNIERS_EVENEMENTS ( avec le type, id et timestamp ). Cette dernière table pouvant être nettoyé tous les jours par exemple ( pour garder un nombre faible d'enregistrements ). La requête de sélection serait un peu plus complexe mais le traitement déporté sur une autre table de moindre importance
__________________
Pierre 1. Dans le manuel ( PHP, MySQL,..., rayez la mention inutile), tu te plongeras à deux fois plutôt qu'aucune. 2. Dans la doc php, tu liras attentivement les sections Chaines de caractères, Tableaux et Système de fichiers 3. Un code rapide c'est bien, un code maintenable c'est mieux ... Why was the font tag an orphan ? Because it didn't have a font-family. |
|
|
|
|
|
#6 (permalink) |
|
Invité de passage
![]() Nom : Besky
Date d'inscription: janvier 2010
Messages: 5
|
Bonjour FCYPBA merci de ta réponse. Après m'être renseigné sur les trigger (ce qui n'est pas simple) je pense opter pour cette solution, plus légère et plus complète (ce qui me permettra via une autre table, de différencier les mises à jour et les ajout dans mes tables) à mon avis que d'utiliser plusieurs requêtes mysql.
Seulement si tu pouvais m'éclairer sur la façon d'utiliser les triggers je t'en serais reconnaissant car comme je t'ai dis je me suis renseigné sur mon ami google sans grand succès car le peu d'informations que j'ai pu dénicher ne m'ont pas beaucoup aidé. Tout d'abord j'aimerais savoir si je peux et s'il est mieux, de créer mon trigger via phpmyadmin directement ou bien s'il est mieux de le créer via un code dans ma/mes pages php ? Et dans le premier cas comme dans l'autre pourrais tu me donner la procédure afin de pouvoir créer ce/ces triggers ? Merci d'avance |
|
|
|
|
|
#7 (permalink) |
|
Nouveau membre du Club
![]() Date d'inscription: janvier 2008
Messages: 79
|
@FCYPBA : Le problème de ta deuxième solution est que tu fais cette opération sur des tables différentes. Le Union requiert quelques contraintes... Ou alors tu rajoute une colonne pour différencier news / livre d'or....
Mais j'adore ta troisième proposition. Pour la syntaxe d'un create trigger : La page de la doc. Mais sinon, pour toi, ce sera certainement quelques chose du type : CREATE TRIGGER le_nom_de_ton_trigger AFTER INSERT ON le_nom_de_ta_table FOR EACH ROW et ensuite ta requete d'insertion.... Mais en y repensant, une procédure stocké ne ferait-elle pas l'affaire ? Avec comme entré le pseudo et son "action". On evite à avoir à réécrire un trigger sur chaque table. De plus ça me parait un peu plus adapté. Enfin, pour les procédures stokées : la doc Pour la question phpMyAdmin, je dirais que oui, tu peux le faire. Patouche |
|
|
|
|
|
#8 (permalink) |
|
Invité de passage
![]() Nom : Besky
Date d'inscription: janvier 2010
Messages: 5
|
Merci Patouche pour les doc ceci dit j'ai pas encore trop compris la procédure stockée il va falloir que je me penche dessus.
Si quelqu'un à un tutoriel bien fait sur ces deux sujets je suis preneur. Merci |
|
|
|
|
|
#9 (permalink) |
|
Nouveau membre du Club
![]() Date d'inscription: janvier 2008
Messages: 79
|
regarde sur ce site. tu as de super tuto en matière de SQL (ceux de sqlpro par exemple) : Page SQLPro
Tu trouveras également 2 tutos ici : tuto mysql Sinon sur le site du zéro, il y en a un mais je sais pas du tout ce qu'il vaut. Regardes de ce coté là : page tuto sql Cordialement, Patouche |
|
|
|
|
|
![]() |
||
Nom d'une table de base de donné phpmyadmin dans condition if
|
||
| Outils de la discussion | |
|
|