aide requete MYSQL

hanlin
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 300
Inscription: 23 Mar 2006

aide requete MYSQL

Message le Mer Oct 21, 2009 23:41

Salut,
Je m'arrache les cheveux sur une requete :
J'ai deux tables
entr_content :
contient des articles sur des entreprises avec des champs
entr_content.id ===>identifiant de l'article
entr_content.id_comp===> identifiant de l'entreprise
entr_content.title ===> titre
entr_content.date ===> date


entr_companies
contient les le nom des entreprises
entr_companies.id===> identifiant de l'entreprise
entr_companies.name====>nom de l'entreprise

J'essaye de faire apparaitre les entreprises les plus citées dans mes articles ces dernière 24 heures.Sur ma page web je veux qu'elles apparaissent en ordre decroissant avec en dessous les trois dernières news qui leur correspondent.
J'ai fait une première tentative mais la je m'embrouille complet et ça ne marche pas :oops:
Code: Tout sélectionner
SELECT entr_companies.name, entries_num
FROM entr_companies, (SELECT entr_content.id_comp, COUNT(*) AS entries_num
FROM entr_content GROUP BY entr_content.id_comp
) AS count_query WHERE entr_content.id_comp=entr_companies.id ORDER BY entr_companies.name
limit 0,30

Merci pour toute suggestion
Hanlin


screuscreu
WRInaute impliqué
WRInaute impliqué
 
Messages: 968
Inscription: 14 Jan 2008

Re: aide requete MYSQL

Message le Jeu Oct 22, 2009 8:57

Alors, sans tester et au réveil, je sais pas si tu (enfin je) peux tout faire en une requete :

En théorie avec ça tu récupère les entreprises qui sont le + cités dans les 24 dernières heures.
Code: Tout sélectionner
SELECT
   E.name,
   COUNT(C.id) as nb
FROM
   entr_content as C,
   entr_companies as E
WHERE
   C.id_comp = E.id AND
   DATE_SUB(CURDATE(),INTERVAL 1 DAY) <= C.date
GROUP BY
   C.id_comp
ORDER BY
   nb DESC, N.date DESC


Et essaye ça au cas où mais j'ai peur que le résultat ne soit pas top.
Code: Tout sélectionner
SELECT
   E.name,
   N.titre,
   COUNT(C.id) as nb
FROM
   entr_content as C,
   entr_companies as E
   LEFT JOIN news as N ON(E.id = N.entreprise_id)
WHERE
   C.id_comp = E.id AND
   DATE_SUB(CURDATE(),INTERVAL 1 DAY) <= C.date
GROUP BY
   C.id_comp
ORDER BY
   nb DESC, N.date DESC



Merci aux habitués de me corriger !

hanlin
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 300
Inscription: 23 Mar 2006

Re: aide requete MYSQL

Message le Jeu Oct 22, 2009 9:46

Lorsque je lance ta première requête il semble y avoir un problème avec N.date DESC


screuscreu
WRInaute impliqué
WRInaute impliqué
 
Messages: 968
Inscription: 14 Jan 2008

Re: aide requete MYSQL

Message le Jeu Oct 22, 2009 9:59

évidemment il faut l'enlever puisque tu ne récupère pas de News ;)

jcaron
WRInaute accro
WRInaute accro
 
Messages: 2685
Inscription: 13 Fév 2004

Re: aide requete MYSQL

Message le Jeu Oct 22, 2009 13:03

Je dirais (pas testé):
Code: Tout sélectionner
SELECT
  *
FROM
  entr_content cn,
  entr_companies cm,
  (
    SELECT
      id_comp,
      count(*) AS count
    FROM
      entr_content
    WHERE
      date > now()-cast('1d' as interval)
    GROUP BY
      id_comp
  ) cm2
WHERE
    cm.id=cm2.id_comp
  AND
    cn.id IN (
      SELECT
        id
      FROM
        entr_content cn2
      WHERE
        cn2.id_comp=cm.id
      ORDER BY
        date DESC
      LIMIT 3
    )
ORDER BY
  cm2.count DESC,
  cn.date DESC


Ca doit pas être bien loin hopefully.

Jacques.

hanlin
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 300
Inscription: 23 Mar 2006

Re: aide requete MYSQL

Message le Jeu Oct 22, 2009 13:44

En fait j'ai trouvé une solution intermédiaire, sortir les entreprise en requete 1 et faire un foreach pour chaque entreprise avec une sous requête pour sortir chaque article. Mais bon le temps de chargement est pas terrible...


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité