Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Цикл, Выводить не повторяющиеся записи 
:(
    Опции темы
Dimash[Odessa]
Дата 26.12.2006, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 25.12.2006

Репутация: нет
Всего: нет



Код

    
            $q=mysql_query("SELECT `added` FROM `news`");
                  for(;$r=mysql_fetch_assoc($q);){
                    $added=explode("-",$r['added']);
                    $day=$added[2];
                 $month=$months_r[$added[1]];
                    $year[].=$added[0];
                    }


Как сделать так, чтобы года не повторялись вот так 2004 2004 2005 2005 2005 , а каждый год был по одному.. как написать условие.. что не писал .. одна же ерунда.  Ps. В Базе есть новости, и года высвечиваются в админке, если на этот год есть новость как ссылка... Вот для чего так выводить года.

Добавлено @ 12:04 
\
Код

    
            
            for($i=2100;$i>=2003;$i--)
            {
                
            

            $q=mysql_query("SELECT `added` FROM `news`");
                  for(;$r=mysql_fetch_assoc($q);){
                    $added=explode("-",$r['added']);
                    $day=$added[2];
                 $month=$months_r[$added[1]];
                    $year[].=$added[0];
                        if($i==$added[0])
                        {
                        echo $i;
                        break;    
                        }
                    }
            
                    
            }
                
        


Это сообщение отредактировал(а) Dimash[Odessa] - 26.12.2006, 11:56
PM MAIL   Вверх
Nicholas_S
Дата 26.12.2006, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 486
Регистрация: 12.10.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 19



Dimash[Odessa], сразу замечания:
1. По коду - учитесь писать грамотно, посмотрите на примеры профессионалов.
2. ПО условию - формулируй, чтобы отвечающие поняли.
Непонятно, почему года сохраняются в элемент массива, поэтому пример без этого:
Код

$q = mysql_query('SELECT `added` FROM `news`');
$year = 0;
while ($r=mysql_fetch_assoc($q))
{
  $added = explode('-', $r['added']);
  $day = $added[2];
  $month = $months_r[$added[1]];
  if ($added[0] != $year)
  {
    $year = $added[0];
    // здесь действия по выводу года и проч.
  }
}


Added
Когда отвечал, добавления не было.
Более рационально было бы воспользоваться хранением даты в поле типа date и использовать один запрос SQL для извлечения неповторяющихся значений годов.

Это сообщение отредактировал(а) Nicholas_S - 26.12.2006, 12:19


--------------------
...все в мире относительно
PM   Вверх
-=Ustas=-
Дата 26.12.2006, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: 4
Всего: 69



странные вообще-то у тебя конструкции. ты лучше скажи что тебе нужно и структуру таблицы покажи


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
Dimash[Odessa]
Дата 26.12.2006, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 25.12.2006

Репутация: нет
Всего: нет



Спасибо Николос. Твоя конструкция намного лучше.
PM MAIL   Вверх
G0rinich
Дата 28.12.2006, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 21.8.2006

Репутация: нет
Всего: 1



Если года надо вернуть именно в виде массива, то можно предложить 2 решения

1. Все оставить точно так и над итоговым массивом сделать array_unique()
2. Делать не $year[].=$added[0];, а $year[$added[0]]++; А потом вернуть array_keys().

Кажется мне, что второй вариант оптимальнее.

Ну или использовать пример Nicholas_S, но только если вывод будет осуществляться тут же и при условии, что года идут последовательно и не может быть последовательности типа 2006 2005 2004 2005...

Ну а самое грамотное, это заставить БД выдать все уникальные года, это будет на порядок быстрее, т.к. MySQL с математическими операциями работает пошустрее РНР.

Это сообщение отредактировал(а) G0rinich - 28.12.2006, 12:09
PM MAIL   Вверх
Mal Hack
Дата 28.12.2006, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 8
Всего: 261



Если надо получить список лет, то:
Код
SELECT `added` FROM `news` GROUP BY `added`

или добавлоением в начал DISTICT

Модератор: тема для MySQL форума
PM ICQ   Вверх
Nicholas_S
Дата 28.12.2006, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 486
Регистрация: 12.10.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 19



Mal Hack, у него даты хранятся в текстовом формате, поэтому получить неповторяющийся список годов таким запросом не получится.
Плюс небольшая поправка - DISTINCT.  smile 


--------------------
...все в мире относительно
PM   Вверх
Mal Hack
Дата 28.12.2006, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 8
Всего: 261



Nicholas_S, SUBSTRING на что? FORMAT_DATE на что?
PM ICQ   Вверх
Nicholas_S
Дата 28.12.2006, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 486
Регистрация: 12.10.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 19



Mal Hack, при условии, что ему нужно вытащить не только часть даты, но так же еще и день/месяц, то DISTINCT не выдаст нужного результата - он исключит все одинаковые даты, однако даты типа 2006-11-12 & 2006-11-13 он не разделит как одинаковые. Даже если ты вызовешь SUBSTRING(<здесь выдираем дату>), то DISTINCT не сработает в виду уникальности полей дат.
Приведешь пример?  smile 


--------------------
...все в мире относительно
PM   Вверх
Mal Hack
Дата 28.12.2006, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 8
Всего: 261



Nicholas_S, я не имею ввиду, когда ему надо вытащить все новости. Если ему надо получить года, когда были новости, то надо делать так, как я говорил выше с использованием FORMAT_DATE.
PM ICQ   Вверх
Nicholas_S
Дата 28.12.2006, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 486
Регистрация: 12.10.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 19



Mal Hack, если только года, то согласен


--------------------
...все в мире относительно
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0515 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.