aide requete MYSQL

WRInaute occasionnel
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:
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
 
WRInaute impliqué
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:
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:
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 !
 
WRInaute accro
Je dirais (pas testé):
Code:
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.
 
WRInaute occasionnel
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...
 
Discussions similaires
Haut