2013-08-06 3 views
0

Я создаю систему чата php, и я хотел бы добавить заголовок для каждого дня.получить значение предыдущего массива

Для того, чтобы достичь этого мне нужен способ, чтобы получить как текущую дату сообщения и предыдущую дату messgage из моей базы данных, так что я могу использовать их в если заявление:

<?php if ($dtdate != $dtdateprev) : ?> 

Я имею проблема с получением предыдущей даты ввода.

Для того, чтобы получить эти значения, я использую следующее:

<?php 
$sql=mysql_query("SELECT * FROM test"); 
while($row=mysql_fetch_array($sql)) { 
    $dtval=$row['dtdate']; 
    $dtvalprev= **???**; 
    $dtdate=date_format(new DateTime($dtval), "D d M Y"); 
    $dtdateprev=date_format(new DateTime($dtvalprev), "D d M Y"); 
?> 
<?php if ($dtdate != $dtdateprev) : ?> 
<div>Example Header</div> 
<?php endif; ?> 
<div>Example Message Body</div> 
<?php } ?> 

Так мне нужна помощь для $ dtvalprev! Заранее спасибо.

+0

Только боковое примечание, функции mysql_ * будут устаревать с PHP 5.5.0+, вам следует рассмотреть использование PDO или mysqli_ * – Resitive

ответ

0

Вы можете получить предыдущую дату с помощью запроса:

select t.*, 
     (select dtdate 
     from test t2 
     where t2.dtdate < t.dtdate 
     order by dtdate desc 
     limit 1 
     ) as prevdtdate 
from test t; 

В качестве альтернативы, вы можете запросить базу данных в хронологическом порядке:

select t.* 
from test t 
order by dtdate; 

И используйте логику в php для запоминания предыдущего значения.

0

Попробуйте это,

<?php 
$sql=mysql_query("SELECT * FROM test"); 
$dtvalprev= '';//previous value initially blank 
while($row=mysql_fetch_array($sql)) { 
    $dtval=$row['dtdate']; 

    $dtdate=date_format(new DateTime($dtval), "D d M Y"); 
    if($dtdateprev)// check previous value should not blank 
     $dtdateprev=date_format(new DateTime($dtvalprev), "D d M Y"); 

    ?> 
    <?php if ($dtdate != $dtdateprev) : ?> 
     <div>Example Header</div> 
    <?php endif; ?> 
    <div>Example Message Body</div> 
    <?php 
    $dtdateprev=$dtval;// re-assign the current value 
} 
?> 
+0

Для второй записи и следующего: ** $ dtdateprev ** при использовании в _echo_ печатает текущую дату, а не предыдущее значение. Для первого это нулевое значение должно быть. Есть предположения? – nkotsioris

+0

Нет, если вы 'echo' функцию ** $ dtdateprev **, то это даст' предыдущий value' –

+0

я заменил ''

Example Message Body

и я получаю следующее: '
Example Header

Fri 26 Oct 2012 13:08:31

Example Header

Sat 27 Oct 2012 14:02:09

Tue 06 Aug 2013 13:00:09

Example Header

Mon 05 Nov 2012 12:02:11

Tue 06 Aug 2013 13:00:09

Example Header

Mon 05 Nov 2012 12:04:54

Tue 06 Aug 2013 13:00:09

'. Я также изменил формат даты на «D d M Y H: i: s». – nkotsioris

Смежные вопросы