1. Pour Black Friday on FRACASSE les prix ⚡ avec RM Tech Découverte
    Rejeter la notice

Récupérer les 10 premiers articles de chaque rubrique? - Mysql

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par noren, 7 Septembre 2013.

  1. noren
    noren WRInaute accro
    Inscrit:
    8 Avril 2011
    Messages:
    2 906
    J'aime reçus:
    14
    Bonjour

    Je souhaiterais afficher les 10 premiers articles de chaque rubrique. Est-ce possible de le faire en une seule requête ou suis je obligé de faire une requête pour chaque rubrique (trop lourd!)? classés en fonction de la date de publication

    Tables :

    t_rubriques
    id_rubrique
    rubrique

    t_articles
    id_article
    article
    date_publication

    t_art_rub
    id_rubrique
    id_article

    Sur ma page je veux donc ceci :

    RUBRIQUE 1
    article 1
    artcile 2
    ...
    article 10


    RUBRIQUE 2
    article 1
    article 2
    ...
    article 10

    Etc.


    Merci d'avance pour votre aide (je n'arrive pas à trouver de solution avec les group by, having etc.).
     
  2. noren
    noren WRInaute accro
    Inscrit:
    8 Avril 2011
    Messages:
    2 906
    J'aime reçus:
    14
    Ah j'oubliais, sans faire de requêtes imbriqués si possible. :mrgreen:
     
  3. ybet
    ybet WRInaute accro
    Inscrit:
    22 Novembre 2003
    Messages:
    7 516
    J'aime reçus:
    1
    et ...
    comment veut- tu répondre à ce post sans savoir la structure de ta base de donnée au niveau tables?
    Exemple: la même fiche est reprise sur deux tables: la première reprend titre, date création, .... et une jointure avec une autre table reprenant le contenu (un peu comme dans les logiciels de facturation): juste reprendre les 10 dernières. Dans le même exemple, un champ ID est incrémenté: on reprend simplement les 10 ID les plus haut.
     
  4. noren
    noren WRInaute accro
    Inscrit:
    8 Avril 2011
    Messages:
    2 906
    J'aime reçus:
    14
    Désolé mais j'ai pas compris ta réponse :|

    J'ai pourtant donné la structure des mes tables plus haut :

    Tables :

    t_rubriques //table ou toutes les rubriques sont enregistrés

    id_rubrique (auto incrémenté)
    rubrique


    t_articles //table ou tous les articles sont enregistrés

    id_article (auto incrémenté)
    article
    date_publication //date d'ajout de l'article


    t_art_rub //table qui fait la relation entre l’article et la rubrique auquel il appartient

    id_rubrique
    id_article

    Un article est associé à une seule rubrique.

    Une fois qu'on a ses éléments j'imagine (j’espère) qu'il doit bien y avoir une requête possible pour récupérer les 10 premiers articles (classés par date de publication) de chaque rubrique.

    Comme indiqué également on récupère les articles en fonction de la date de publication (par ordre décroissant ou croissant peu importe je serais modifier si nécessaire) :wink:

    J'arrive donc pas à comprendre quelles infos supplémentaires je peux donner :/ les 3 tables sont assez simples et la demande également (même si la requête est surement plus complexe, ou pas...). Et je pense pas qu'il soit nécessaire d'avoir plus d'info pour y répondre (je me trompe peut être)

    J'ai indiqué la version simplifiée des tables car il est inutile que j'indique les champs supplémentaires (titres etc.)

    pas certain également de comprendre le rapport avec le logiciel de facturation désolé :?

    je veux juste pouvoir afficher les 10 premiers articles des X rubriques du site sur ma page ceci en essyant d'éviter de faire X requetes

    Je pourrais très bien faire une boucle sur ce type de requêtes X fois (x = le nombre de rubriques), mais j'ose espérer que l'on peut faire ça avec une seule requête.

    Code:
    SELECT article FROM t_article A, t_art_rub AR WHERE A.id_article=AR.id_article AND id_rubrique=$id_rubrique order by A.date_publication LIMITE 0,10
     
  5. zeb
    zeb WRInaute accro
    Inscrit:
    5 Décembre 2004
    Messages:
    12 190
    J'aime reçus:
    1
    J'ai essayé chez moi avec une requête imbriqué dans une autre (la première parse les rubriques, celle imbriqué les articles) mais la sélection des id d'article que je faisait sur une clause where (idarticle IN (select id from tablearticle where idrubrique = idrub order by date limit 0,10)) renvoie une erreur en me disant que je ne peut pas utiliser de LIMIT dans la requête imbriquée avec IN
     
  6. puretentation
    puretentation Nouveau WRInaute
    Inscrit:
    2 Octobre 2012
    Messages:
    15
    J'aime reçus:
    0
    Trop lourd en quoi ? Temps de réponses ? Ressources ? ou à coder ?
    Moi les requetes de 3 kms j'évite si ma base n'est pas bien structurée et (dans le cas de MySQL) si je ne suis pas en InnoDB avec des contraintes nombreuses et en béton. N'oublions pas que MySQL ne se contente pas d'éxecuter les requêtes mais s'appuie sur la structure pour faciliter leur exécution.
    De plus, si c'est 'trop lourd' en temps de réponses, pense à faire un cache avec un cron qui le rafraichit..
    Je ne pense pas que le résultat de ta requête change toutes les 10 secondes non ?
     
  7. noren
    noren WRInaute accro
    Inscrit:
    8 Avril 2011
    Messages:
    2 906
    J'aime reçus:
    14
    @zeb :

    J'aurais plus pensé que cette problématique pouvait être réglée avec un group by (ou having) ou un truc dans le genre.
    je suis persuadé qu'il doit y avoir une solution avec une requête assez simple, mais j'arrive pas à trouver :/

    Genre on groupe par rubrique, mais j'ai pas réussi.

    par contre dans ta solution en enlevant le limit tu affiches bien tous les articles de chaque rubriques? la par contre j'imagine que le temps de réponse explose d'autant plus qu'il y a une requête imbriquée.

    @puretentation :

    trop lourd dans la mesure ou je souhaites limiter le nombre de hits (requêtes, appel d'images, include etc.)
    certes je pourrais mettre la page en cache pour limiter ainsi le nombre de requête dans la journée.

    Faire une requête par rubrique ne serait pas forcément trop lourd en temps de réponse, mais si on a une dizaine de requête juste pour ça (en plus des autres requêtes pour d'autres éléments sur la page) je trouve ça pas terrible, mais ça reste un avis personnel. J'aime ne pas dépasser les 5-10 requêtes pour une page.

    Si vraiment j'ai pas le choix je ferais de cette façon, mais j'aimerais pouvoir être certain d'avoir étudié d'autres choix possibles, dont celui de pouvoir gérer ça avec une seule requête. ça doit quand même être faisable, ensuite je pourrais comparer sur les temps de réponses etc. :wink:

    la structure de ma base et de mes tables est suffisamment simple pour ne pas être un problème pour ces requêtes. Suffit de voir les tables que j'ai indiqué pour comprendre que la structure est simple. :mrgreen:

    PS : je ne suis pas en innodb

    Basons nous sur 10 000 articles et 8 rubriques.
     
  8. zeb
    zeb WRInaute accro
    Inscrit:
    5 Décembre 2004
    Messages:
    12 190
    J'aime reçus:
    1
    oui j'ai bien les articles de chaque rubrique mais pas limités en nombre. Sinon oui ça deviens gourmand si je fais ça sur le domaine principal car 40 000 rubriques et des 100aine de milliers d'articles (bref j'ai testé sur un petit sous domaine qui a la même structure)
     
  9. noren
    noren WRInaute accro
    Inscrit:
    8 Avril 2011
    Messages:
    2 906
    J'aime reçus:
    14
    Merci pour ton test :wink:

    Dans mon cas les rubriques devraient pas dépasser 10-15 et les articles 100 000 mais dans quelques années lol
    Mais au moins t'as un test concluant.

    mais si on ajoute a cela que je souhaites récupérer que 10 articles de chaque rubriques ça devrait être encore moins gourmand encore faudrait-il pouvoir caler ce fichu LIMIT :)

    Si quelqu'un à une solution je suis toujours preneur :mrgreen:
     
  10. noren
    noren WRInaute accro
    Inscrit:
    8 Avril 2011
    Messages:
    2 906
    J'aime reçus:
    14
    Je me permet de remonter ce post, car ma question est toujours d'actualité

    Donc si un pro de mysql passe par là :mrgreen:
     
  11. MikeR
    MikeR WRInaute passionné
    Inscrit:
    9 Janvier 2010
    Messages:
    1 416
    J'aime reçus:
    0
    Je pense que l'utilisation de CURSOR permet d'itérer à travers les résultats d'une première requète et d'en effectuer une seconde. Voir ici.
     
  12. noren
    noren WRInaute accro
    Inscrit:
    8 Avril 2011
    Messages:
    2 906
    J'aime reçus:
    14
    Ah, je ne connaissait absolument pas les curseurs.

    Merci pour cette piste que je vais étudier. Si d'autres ont une solution qui pourrait paraitre plus simple qu'ils n'hésitent pas. :wink:
     
Chargement...
Similar Threads - Récupérer premiers articles Forum Date
Search Console Sitemaps non indéxés ""Impossible de recuperer le sitemap" Crawl et indexation Google, sitemaps 23 Juillet 2020
Récupérer backlinks vers liens morts : fausse bonne idée ? Netlinking, backlinks, liens et redirections 6 Avril 2020
Récupérer le contenu d'une vidéo youtube Le café de WebRankInfo 23 Mars 2020
Comment récupérer un compte insta ouvert par un cybersquatteur ? Autres réseaux sociaux 29 Janvier 2020
comment récupérer mon positionnement Problèmes de référencement spécifiques à vos sites 5 Janvier 2020
Attendre des années avant de récupérer l'argent amassé sur adsense AdSense 23 Novembre 2019
Comment récupérer variable dynamique pour GTM ? Google Analytics 30 Septembre 2019
SELECT COUNT avec PDO et récupérer le résultat Développement d'un site Web ou d'une appli mobile 27 Mai 2019
récupérer id en php sans lien Développement d'un site Web ou d'une appli mobile 25 Avril 2019
Récupérer events via API google analytics Google Analytics 6 Avril 2019