Как отсортировать по предыдущей дате в базе данных?

#php #mysql

#php #mysql

Вопрос:

Я хочу спросить, как выбрать из записи базы данных и моего php-кода возможность сортировки предыдущей даты по дате, что я и хочу отобразить в своем интерфейсе:

 2011-10-01

2011-10-01

2011-10-01

something here..


2011-10-02

2011-10-02

something here..


2011-10-03

something here..
  

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

вот мой код (но он не работает):

 $Current = date("Y-m-d" ,strtotime("now"));

$query= mysql_query("SELECT date FROM staff WHERE date < '$Current'");
while($res=mysql_fetch_array($query)){
echo $res['date'];
echo "something here";
}
  

Спасибо

Комментарии:

1. вы пытались добавить order by в свой запрос

Ответ №1:

Разве вы не можете просто использовать это?

 SELECT `date` FROM staff WHERE `date` < NOW() ORDER BY `date`
  

или (если вам нужны только разные даты)

 SELECT DISTINCT `date` FROM staff WHERE `date` < NOW() ORDER BY `date`
  

Комментарии:

1. Проблема с distinct заключается в том, что он не получит количество, и его требуемый вывод показывает, что он повторяет одну и ту же дату несколько раз, прежде чем написать свою пользовательскую строку. С distinct вы не будете знать, что это за количество.

2. @Andrew: вы правы в SQL, но поверьте мне, мне трудно понять, чего на самом деле хочет / просит OP…

3. спасибо за комментарий, он сортирует по моей дате, но как отделить предыдущую дату, отображая другую строку таблицы? пример: 2011-10-01 в одной строке таблицы, 2011-10-02 в другой строке таблицы

4. @user1035140: Прошу прощения, но я действительно не понимаю, что вы пытаетесь получить в результате. Можете ли вы объяснить подробнее?

Ответ №2:

 ("SELECT count(*), date FROM staff WHERE date < '$Current' GROUP BY date ORDER BY date asc"); 
  

Сгруппируйте их с помощью count, затем вы можете записать каждую дату столько раз, сколько указано в count, затем напишите свое дополнительное значение.

Ответ №3:

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

 SELECT date FROM staff WHERE date < '$Current' ORDER BY date ASC GROUP BY date;
  

Комментарии:

1. Сгруппированные даты (эквивалентно distinct) означает, что OP не будет знать, сколько раз повторять дату в своих выходных данных — он показывает, что одна и та же дата печатается несколько раз, поэтому у него должно быть количество дат, если они сгруппированы / различны.

2. @Andrew Да, я был немного неуверен в том, что требуется. Подумал, что добавлю это, чтобы показать метод группировки по дате.

Ответ №4:

необходимый вам код очень прост.
вам просто нужно понимать значение цикла и «запоминать» состояние между итерациями

 //a variable to remember the old date
$olddate = '';
//i named this variable $sql because it actually contains an sql query
$sql = "SELECT date FROM staff WHERE date < '$Current'";
//I named this variable $res because it actually contains NOT sql query, but mysql RESource.
$res = mysql_query($sql) or treigger_error(mysql_error()." ".$sql);
//I named this variable $row because it actually represents a row from the database.
while($row=mysql_fetch_array($res)) {
  if ($olddate and $olddate != $row['date']) {
    echo "something here";
  }
  echo $row['date'];
  $olddate = $row['date'];
}