#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'];
}