IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Afficher les données de plusieurs tables par date en une seule liste. [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 90
    Points : 36
    Points
    36
    Par défaut Afficher les données de plusieurs tables par date en une seule liste.
    Bonjour à tous !

    Je suis confronté à un problème qui m'agace et qui me coince un peu... Je m'explique. Je possède plusieurs tables pour les différents commentaires sur mon site. J'ai donc les tables suivantes :
    - comments_news (id_comments, id_externe, pseudo, commentaire, date)
    - comments_tests (pareil)
    - comments_videos (pareil)
    - comments_soluces (pareil)

    En gros je souhaite créer un bloc avec les dix derniers commentaires sur mon site. Si j'avais tout regroupé en une seule table, ca aurait été facile mais là je sais pas comment faire. J'ai réfléchi à une manière de faire mais je sais pas du tout si c'est faisable... Je prends les dix derniers commentaires de chaque table, donc en tout ça me ferait 40 variables à retenir. Puis je trie ces variables par date et j'affiche les 10 dernières... Dans la théorie ça a l'air simple mais dans la pratique je me dis que je peux faire plus facile...

    J'espère que vous pourriez m'aider à me débloquer et me donner des idées...

    Merci d'avance !

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 146
    Points : 262
    Points
    262
    Par défaut
    La solution la plus simple ce sont les unions de mysql :

    http://dev.mysql.com/doc/refman/5.0/fr/union.html

    Tu fait un union des 4 recherches des 4 derniers tu trie par date et tu prends les 10 derniers

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 90
    Points : 36
    Points
    36
    Par défaut
    Merci déjà pour ta réponse !

    Alors j'ai un peu regardé même si j'ai pas tout compris... En gros je ferais un truc comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <?php
    $reponse = mysql_query("(SELECT * FROM comments_news ORDER BY id LIMIT 10)
    UNION
    (SELECT * FROM comments_tests ORDER BY id LIMIT 10)
    UNION
    (SELECT * FROM comments_videos ORDER BY id LIMIT 10)
    UNION
    (SELECT * FROM comments_soluces ORDER BY id LIMIT 10)
    ORDER BY date LIMIT 10");
     
    $donnees = mysql_fetch_array($reponse);
     
    ?>
    Bon je me suis peut-être trompé sur certaines choses, notamment les parenthèses ou les guillemets, mais est-ce que dans l'idée je suis assez proche de ce que je dois faire ?

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 146
    Points : 262
    Points
    262
    Par défaut
    Oui

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 90
    Points : 36
    Points
    36
    Par défaut
    Bon j'ai réussi à faire afficher les commentaires ! Merci, merci merci !

    Par contre, maintenant faut que je trouve un moyen de faire des liens pour chaque commentaire, mais j'avoue que ça coince encore plus...

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 146
    Points : 262
    Points
    262
    Par défaut
    Pas vraiment :p

    Au lieu de faire des select * tu rajoute un select 'xx' AS Type, id_comments, id_externe, pseudo, commentaire, date from ...

    avec le xx qui change en fonction de la table pour connaitre le type de commentaires ou directement le calcul de l url si c'est possible

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 90
    Points : 36
    Points
    36
    Par défaut
    Je peux créer autant de "AS" que je veux ?

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 146
    Points : 262
    Points
    262
    Par défaut
    Tu peut expliciter ta question ?

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 90
    Points : 36
    Points
    36
    Par défaut
    Ben, dans les tables que j'ai actuellement, je n'ai que le strict nécessaire... Ma question serait de savoir si je peux créer de fausses variables dans la requete SQL et si oui, si je peux en faire tant que je veux :p

  10. #10
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 146
    Points : 262
    Points
    262
    Par défaut
    Alors la réponse est oui

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 90
    Points : 36
    Points
    36
    Par défaut
    Je :up: le topic car j'ai besoin d'aide de nouveau. J'aimerais créé des fausses variables comme j'ai demandé plus haut mais je vois pas comment faire. JE vais expliquer quelle variable je voudrais créer.

    Pour (SELECT * FROM comments_news ORDER BY id LIMIT 10) j'aimerais créer une variable qui s'appelle "adresse" et qui aurait comme contenu la chaine de caractères "news.php?article=". Comment je pourrais m'y prendre en sachant qu'une variable "adresse" sera aussi créée pour les autres requêtes mais elle serait différente ?

    Merci !

  12. #12
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 146
    Points : 262
    Points
    262
    Par défaut
    Hum hum hum je t'ai donner la réponse plusieurs posts plus haut déjà

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select 'news.php?article=' AS adresse, id_comments, id_externe, pseudo, commentaire, date from comments_news ORDER BY id LIMIT 10
    Effectivement il faut changer le xxx et Type de mon exemple mais je pense que tu pouvais le faire

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 90
    Points : 36
    Points
    36
    Par défaut
    Non mais je suis complètement débile xD En fait, je confondais avec "INSERT INTO"... Je pensais qu'il fallait utiliser une "value" ^^ Je crois que je devrais reprendre les cours de sql de zéro parce que je me sens très très con !

    Merci !

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 90
    Points : 36
    Points
    36
    Par défaut
    Bon, maintenant je me pose la question, toujours sur ces mêmes requetes SQL (heureusement ^^).

    Pour compléter mon adresse, j'ai besoin de récupérer dans une autre table une valeur via un paramètre SQL établi plus haut : le id_externe. En effet, dans le cas de news, j'aimerais récupérer une information de la table "news" où la news possède le même id que "id_externe". Je pensais faire une sous-requête mais je vois pas trop où...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    $reponse = mysql_query("(SELECT 'news.php?article=' AS adresse, '(SELECT article FROM news WHERE id=id_externe)' AS article, id_comments, id_externe, pseudo, commentaire, date FROM comments_news ORDER BY id LIMIT 10)
    UNION
    ...
    ORDER BY date LIMIT 10");
    ?>
    Mais j'ai l'impression que c'est pas possible... Une idée ?

    Merci d'avance et désolé pour le dérangement :p

  15. #15
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 146
    Points : 262
    Points
    262
    Par défaut
    Il faut utiliser une jointure

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT a.x , b.y from a left join b on (a.id = b.id)
    (Exemple très basique).

    Je pense qu'effectivement tu devrais aller refaire un tour du coté des tutos SQL proposé ici

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 90
    Points : 36
    Points
    36
    Par défaut
    Je t'avoue que j'ai énormément de mal avec les jointures... Est-ce que je suis loin de la bonne solution ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT 'news.php?article=' AS adresse, id_comments, id_externe, pseudo, commentaire, date 
     
    FROM comments_news 
     
    LEFT JOIN news
     
    ON news.id = comments_news.id_externe
     
    ORDER BY id LIMIT 10
    Je suis désolé de poser de telles questions mais j'avoue que je ne comprends pas grand chose en jointure...

  17. #17
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 146
    Points : 262
    Points
    262
    Par défaut
    Pas très loin

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT 'news.php?article=' AS `adresse`, `comments_news`.`id_comments`, `comments_news`.`id_externe`, `comments_news`.`pseudo`, `comments_news`.`commentaire`, `comments_news`.`date` , `news`.`article`
     
    FROM `comments_news`
     
    INNER JOIN `news`
     
    ON ( `news`.`id` = `comments_news`.`id_externe` )
     
    ORDER BY `news`.`id` LIMIT 10
    Pour être plus propre et plus rapide.

    Par contre je suppose qu'il manque quelque chose car si tu fait une jointure c'est normalement pour récupérer une information de la table news j'ai rajouter au hasard le news.article a toi de mettre les bonnes valeurs

  18. #18
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 90
    Points : 36
    Points
    36
    Par défaut
    Merci à toi, maintenant deux questions :

    1) Est-ce que ce serait plus rapide de donner des noms plus courts à mes tables lors de cette requête SQL ?

    2) Lorsque je voudrais récupérer les données pour les afficher sur le site, je devrais écrire $donnees['news.article'] ?

    Merci d'avance ^^

  19. #19
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 146
    Points : 262
    Points
    262
    Par défaut
    Il est vrai qu'il est plus facile de demander que d'aller lire les tutos

    1) Pas plus rapide mais plus simple pour décrire tes jointures et les valeurs que tu veux recupérer.

    2) Non, seul le nom de la colonne est pris en compte, ce qui peut poser des soucis si tu ramène plusieurs colonne de plusieurs tables ayant le même nom c'est pour cela que tu peut utiliser une nouvelle fois l'opérateur AS.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT `comments_news`.`id_comments` AS `id_com`...
    Qui sera ensuite vu comme id_com.

  20. #20
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 90
    Points : 36
    Points
    36
    Par défaut
    Je voudrais te remercier grandement car j'ai enfin pu modifier mon code et ça marche impeccablement ! Merci, merci, merci ! (et en plus j'ai tout compris :p )

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [MySQL] Afficher les données dans un tableau html horizontal avec une seule requête au lieu de 6
    Par arthuro45 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 07/10/2010, 11h13
  2. lier les données de plusieur tables automatiquement
    Par fruitix31 dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 19/06/2007, 12h12
  3. Réponses: 1
    Dernier message: 14/05/2007, 15h46
  4. Réponses: 5
    Dernier message: 23/04/2007, 13h37
  5. [Débutant] Parcourir les données de plusieurs tables.
    Par SmokE dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 13/01/2006, 16h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo