| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > MySQL > Цикл |
| Автор: Dimash[Odessa] 26.12.2006, 11:56 | ||||
Как сделать так, чтобы года не повторялись вот так 2004 2004 2005 2005 2005 , а каждый год был по одному.. как написать условие.. что не писал .. одна же ерунда. Ps. В Базе есть новости, и года высвечиваются в админке, если на этот год есть новость как ссылка... Вот для чего так выводить года. Добавлено @ 12:04 \
|
| Автор: Nicholas_S 26.12.2006, 12:07 | ||
| Dimash[Odessa], сразу замечания: 1. По коду - учитесь писать грамотно, посмотрите на примеры профессионалов. 2. ПО условию - формулируй, чтобы отвечающие поняли. Непонятно, почему года сохраняются в элемент массива, поэтому пример без этого:
Added Когда отвечал, добавления не было. Более рационально было бы воспользоваться хранением даты в поле типа date и использовать один запрос SQL для извлечения неповторяющихся значений годов. |
| Автор: -=Ustas=- 26.12.2006, 12:09 |
| странные вообще-то у тебя конструкции. ты лучше скажи что тебе нужно и структуру таблицы покажи |
| Автор: Dimash[Odessa] 26.12.2006, 12:19 |
| Спасибо Николос. Твоя конструкция намного лучше. |
| Автор: G0rinich 28.12.2006, 12:01 |
| Если года надо вернуть именно в виде массива, то можно предложить 2 решения 1. Все оставить точно так и над итоговым массивом сделать array_unique() 2. Делать не $year[].=$added[0];, а $year[$added[0]]++; А потом вернуть array_keys(). Кажется мне, что второй вариант оптимальнее. Ну или использовать пример Nicholas_S, но только если вывод будет осуществляться тут же и при условии, что года идут последовательно и не может быть последовательности типа 2006 2005 2004 2005... Ну а самое грамотное, это заставить БД выдать все уникальные года, это будет на порядок быстрее, т.к. MySQL с математическими операциями работает пошустрее РНР. |
| Автор: Mal Hack 28.12.2006, 15:37 | ||
Если надо получить список лет, то:
или добавлоением в начал DISTICT Модератор: тема для MySQL форума |
| Автор: Nicholas_S 28.12.2006, 16:09 |
| Mal Hack, у него даты хранятся в текстовом формате, поэтому получить неповторяющийся список годов таким запросом не получится. Плюс небольшая поправка - DISTINCT. |
| Автор: Mal Hack 28.12.2006, 16:14 |
| Nicholas_S, SUBSTRING на что? FORMAT_DATE на что? |
| Автор: Nicholas_S 28.12.2006, 18:55 |
| Mal Hack, при условии, что ему нужно вытащить не только часть даты, но так же еще и день/месяц, то DISTINCT не выдаст нужного результата - он исключит все одинаковые даты, однако даты типа 2006-11-12 & 2006-11-13 он не разделит как одинаковые. Даже если ты вызовешь SUBSTRING(<здесь выдираем дату>), то DISTINCT не сработает в виду уникальности полей дат. Приведешь пример? |
| Автор: Mal Hack 28.12.2006, 18:59 |
| Nicholas_S, я не имею ввиду, когда ему надо вытащить все новости. Если ему надо получить года, когда были новости, то надо делать так, как я говорил выше с использованием FORMAT_DATE. |
| Автор: Nicholas_S 28.12.2006, 19:17 |
| Mal Hack, если только года, то согласен |