2011-12-30 2 views
1

Я всегда путаюсь при работе с датами в PHP и MySQL. Я просмотрел другие сообщения, но не смог найти решение,PHP-запрос MySQL, возвращающий несколько строк с одной датой

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

Даты хранятся с временной меткой MySQL в столбце «TimeStamp» и отформатированы таким образом в базе данных: 2011-12-29 21:16:55 (например).

Вот запрос:

$set_select_sql = "SELECT * 
    FROM `table` 
    ORDER BY `table`.`TimeStamp` DESC 
    LIMIT 0 , 30"; 
$set_query = mysql_query($set_select_sql); 
$HowMany=mysql_num_rows($set_query); 
$time = date("g:i a", strtotime(mysql_result($set_query,0,'TimeStamp'))); 
$date = date("F j, Y ", strtotime(mysql_result($set_query,0,'TimeStamp'))); 
$blogpost = mysql_result($set_query,0,'blogpost'); 

mysql_data_seek($set_query, 0); 
$r = 0; 
while ($r <= $HowMany) { 
    $row = mysql_fetch_assoc($set_query); 
    if ($row == FALSE) { 
    } else { 
     extract($row); 

     echo "It was $time on $date when I posted this.<br/>"; 
     echo "$blogpost" 
    } 
    $r++ 

Почему я только получаю одну дату? Что мне не хватает?

Спасибо!

+1

Вы устанавливаете время и дату переменных значений первой строки. Затем вы просматриваете свои записи, но вы не обновляете переменные времени и даты в своем цикле. – Jrod

+0

Вы можете заменить 'if ($ row == FALSE) {}' на 'if ($ row! == FALSE)', поэтому вам не нужно ставить свою логику в 'else' – jprofitt

ответ

2

Это происходит потому, что вы выводите $time и $date там, которые были НЕ сгружен в цикле ваших строк, но прямо перед ним.

Решение будет получать эти переменные внутри цикла как:

while ($row = mysql_fetch_assoc($set_query)) { 
    $time = date("g:i a", strtotime($row['TimeStamp'])); 
    $date = date("F j, Y ", strtotime($row['TimeStamp'])); 
    $post = $row['blogpost']; 

    echo "It was " . $time . " on " . $date . " that I posted this. <br />"; 
    echo $post; 
} 
+0

Спасибо за помощь , Я знал, что это просто. – mckinselberg

+0

Добро пожаловать, приятель! :) – Jules

0

Вы только получаете дату первой строки найденной с этой линией:

$date = date("F j, Y ", strtotime(mysql_result($set_query,0,'TimeStamp'))); 

Чтобы получить дату для каждой строки, вам нужно получить дату в цикле while и не раньше.

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