2 votes

Groupe par date - Problème de date

Les gars, j'ai vraiment besoin de votre aide sur ce coup-là.

J'ai une liste d'articles utilisant smarty que je veux organiser par date,

Date1
ArticleA
Date2
ArticleB
ArticleC

Le problème que je rencontre est qu'à la date 2 (ou s'il y a plus d'un article publié le même jour), la date 2 entière réapparaît...c'est-à-dire

Date1
ArticleA
Date2
ArticleB
ArticleC
Date2
ArticleB
ArticleC

Je pense que le problème est que la date 2 est une date à laquelle l'article a été publié. La raison pour laquelle il se répète à chaque fois est que les valeurs de temps sont différentes.

Je dois trouver un moyen de supprimer la valeur temporelle de datetime ou de la manipuler pour n'afficher que la date.

Voici mon code

SQL

$sql = 'select ' . TABLE_ADS . ('' . '.*' . $mlang_vars . ', ') . TABLE_ADS . '.id as adid, ' . TABLE_ADS_PICTURES . '.picture, ' . TABLE_ADS_PICTURES . '.`id` as `picture_id`, date_format(' . TABLE_ADS . ('' . '.`date_added`,\'' . $date_format . '\') as date_nice, date_format(') . TABLE_ADS . ('' . '.`date_expires`,\'' . $date_format . '\') as date_expires_nice, (') . TABLE_ADS . ('' . '.date_expires < \'' . $timestamp . '\' and ') . TABLE_ADS . '.date_expires!=\'0000-00-00 00:00:00\' and ' . TABLE_ADS . '.active=0) as expired, ' . TABLE_CATEGORIES . '_lang.name as category, ' . TABLE_PACKAGES . '.amount as amount, ' . TABLE_USERS . ('' . '.username as username ' . $pri_name . ' ' . $video . ' ' . $q_vars . ' from ') . TABLE_ADS . ' 
    LEFT JOIN ' . TABLE_CATEGORIES . '_lang on (' . TABLE_ADS . '.category_id=' . TABLE_CATEGORIES . '_lang.id and ' . TABLE_CATEGORIES . ('' . '_lang.`lang_id` = \'' . $crt_lang . '\')  
    LEFT JOIN ') . TABLE_PACKAGES . ' on ' . TABLE_ADS . '.package_id=' . TABLE_PACKAGES . '.id  
    LEFT JOIN ' . TABLE_USERS . ' on ' . TABLE_ADS . '.user_id=' . TABLE_USERS . '.id  
    LEFT JOIN ' . TABLE_ADS_PICTURES . ' on ' . TABLE_ADS . '.id=' . TABLE_ADS_PICTURES . ('' . '.ad_id 
    ' . $pri_join . ' 
    ' . $video_join . ' 
    ' . $q_join . ' 
    ') . $where . ' group by ' . TABLE_ADS . '.id ' . $order_by . ' ' . $order_way . ' '; 

PHP

{foreach from=$listings_array name="date_nice" item=k}{$k.date_nice} 
{foreach from=$listings_array  name="listing" item=v} 
   {if $k.date_nice==$v.date_nice} 
        {include file="short_listing.html"} 
   {/if} 
{/foreach} 
{/foreach}

1voto

RichardTheKiwi Points 58121

Vous pouvez changer la première ligne de votre sélection en

$sql = 'select ' . TABLE_ADS . ('' . '.*' . $mlang_vars . ', ') . TABLE_ADS . '.id as adid, ' . TABLE_ADS_PICTURES . '.picture, ' . TABLE_ADS_PICTURES . '.`id` as `picture_id`, date_format(' . TABLE_ADS . ('' . '.DATE(`date_added`),\'' . $date_format . '\') as date_nice, date_format(') . TABLE_ADS . ('' . '.DATE(`date_expires`),\'' . $date_format . '\') as date_expires_nice, (') . TABLE_ADS . ('' . '.date_expires < \'' . $timestamp . '\' and ') . TABLE_ADS . '.date_expires!=\'0000-00-00 00:00:00\' and ' . TABLE_ADS . '.active=0) as expired, ' . TABLE_CATEGORIES . '_lang.name as category, ' . TABLE_PACKAGES . '.amount as amount, ' . TABLE_USERS . ('' . '.username as username ' . $pri_name . ' ' . $video . ' ' . $q_vars . ' from ') . TABLE_ADS . ' 

En gros, en utilisant DATE() pour travailler uniquement avec la partie date

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X