Перейти к содержимому



Новостная колонка своими руками

#1 Absorb

Absorb
  • Пользователь
  • 1 сообщений
  • Репутация: 0
0

Отправлено 28 Ноябрь 2009 - 23:16

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

З,Ы, .пхп только начал изучать

<?php

$result = mysql_query ("SELECT * FROM new_position",$db);
$myrow = mysql_fetch_array ($result);

$ij = 1;

do
{
$ij++;
printf
(" <p class='newname' align='center'><a href='hlam?id=%s'>%s</a></p>
<p align='center'>%s</p>
<p class='newname' align='center'>%s руб.</p>",

$myrow["id"], $myrow["name"], $myrow["text"], $myrow["price"]);
}
while ($myrow = mysql_fetch_array ($result) and $ij<=5);

?>


расскажу наглядно, хочу собственноручно сделать колонку на сайте, в которой будут из базы подгружаться
новости, с помошью этого когда они выводятся все(все имеющиеся в таблице), а нужно чтоб выводились только последние 5 новостей...
с помощью переменной $ij я добился что подгружаются только 5 но не последние вбитые в таблицу базы, а самые первые...

нужно так:

1 новость
2 новость
3 новость
4 новость
5 новость

вбил новую строчку(новость) в базе
должно выводится так:

2 новость
3 новость
4 новость
5 новость
6 новость

вбил еше новую строчку(новость) в базе
должно выводится так:

3 новость
4 новость
5 новость
6 новость
7 новость

кто понял что хочет мой большой ламерский мозг, прошу помоч...

 

 

  • 0

#2 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 29 Ноябрь 2009 - 03:18

Absorb, обычно последние новости выводят в обратном порядке, то есть

7 новость
6 новость
5 новость
4 новость
3 новость

Ваш кустарный метод конечно не очень для этого подходит, я думаю подобный код будет более понятен и правелен:
<?php

//запросить записи из таблицы new_position, отсортированные в обратном порядке по полю id и ограничить количество пятью первыми
$result = mysql_query( "SELECT * FROM new_position ORDER BY id DESC LIMIT 5", $db );

if( mysql_num_rows( $result ) ) /*если записей не 0 */
{
while( $myrow = mysql_fetch_array( $result ) )
{
printf ("
<p class='newname' align='center'><a href='hlam?id=%s'>%s</a></p>
<p align='center'>%s</p>
<p class='newname' align='center'>%s руб.</p>
",
$myrow["id"], $myrow["name"], $myrow["text"], $myrow["price"]);
}
}
} else { /*если записей 0 */
echo "Новостей нет";
}

?>


Хотя бы записал лучше даже так:
<?php

//запросить записи из таблицы new_position, отсортированные в обратном порядке по полю id и ограничить количество пятью первыми
$result = mysql_query( "SELECT * FROM new_position ORDER BY id DESC LIMIT 5", $db );

if( mysql_num_rows( $result ) ) /*если записей не 0 */
{
while( $myrow = mysql_fetch_array( $result ) )
{
echo "<p class='newname' align='center'><a href='hlam?id={$myrow["id"]}'>{$myrow["name"]}</a></p>";
echo "<p align='center'>{$myrow["text"]}</p>";
echo "<p class='newname' align='center'>{$myrow["price"]} руб.</p>";
}
} else { /*если записей 0 */
echo "Новостей нет";
}

?>


Выведет так как я и сказал выше...

А если честно, то у новостей присущей характеристикой является дата её написания(создания). Вот именно по ней и надо сортировать, так как id хоть и уникально и нарастает, но явно не должно использоваться в сортировке.
  • 0

#3 gaaarfild

gaaarfild
  • Пользователь
  • 596 сообщений
  • Репутация: 0

Отправлено 29 Ноябрь 2009 - 13:41

Сортировка по дате актуальна, если дата задается собственноручно! =) Тогда, при желании можно создать эффект того, что новость добавлена раньше. А если таковой опции нет, то вполне можно и по ID сортировать. В обратном порядке. Если у поля стоит автоинкремент, то никуда последняя добавленная новость не денется. =)
  • 0


Оформление форума – IPBSkins.ru