2014-06-27 3 views
1

J'ai une base de données MySQL. Ma base de données contient des documents avec une colonne datetime appelée "created". Je veux regrouper par jour afin d'avoir le nombre de documents par jour. Cependant, certains jours ont zéro document et par conséquent ils ne font pas partie de la sortie. Par exemple, j'ai besoin de '2001-01-01' pour avoir un compte zéro si les documents n'existent pas.MySQL Order By Date

Je pense à créer une table supplémentaire avec la plage de dates qui m'intéresse et à Faire une jointure externe avec ma table. Ensuite, je peux regrouper par date pour avoir mes résultats.

Y a-t-il une meilleure façon de faire une telle chose?

Mon code SQL:

Select date(created_at),c.text from Dates d left outer join classifier c on d.n=DATE(c.created_at) 
    where c.classifier="2014streamlrall" 
    and date(c.created_at)>='2014-03-01' and date(c.created_at)<='2014-05-01' 
order by d.n; 

La jointure gauche ne fonctionne toujours pas.

+0

Montrez-nous votre requête – jurgemaister

+0

Vous avez raison, pour le faire en SQL pur, vous aurez besoin d'une autre table, juste avec toutes les dates – Uriil

+0

J'ai téléchargé ma requête, mais cela ne fonctionne toujours pas. – nikosdi

Répondre

3

Il n'y a pas de meilleur moyen pour cela dans MySQL.

Il manque à la fois une méthode pour générer un resultset de longueur arbitraire (similaire à generate_series de PostgreSQL) et un SQL récursif requis pour émuler une telle méthode (qui est utilisée dans SQL Server et Oracle). Le remplissage et le maintien d'une table avec 100 ans de dates (ce qui ne nécessite qu'un peu plus de 73 000 enregistrements) donne de bien meilleures performances sur des rapports similaires aux vôtres que sur un jeu de résultats généré.

0

Votre véritable problème est-il d'avoir créé une ligne avec '2001-01-01: 0'? Si c'est le cas, enveloppez MySQL avec PHP et contrôlez votre sortie avec PHP. Ensuite, vous faites juste écho (ou créez une entrée XML, quel que soit le formatage requis) avec la date et le résultat, même s'il est 0. Même si vous ne connaissez actuellement rien sur PHP, il existe de nombreux tutoriels sur l'exécution des requêtes MySQL en PHP et résultats de sortie. Bonne chance.