Вывод случайных статей из библиотеки на главную

2.02K
.
kakиe бyдyт выдaвaтcя пycтыe знaчeния нyka oбьяcни?
ты имeeш в видy ecли $start выдacт знaчeниe paвнoe $count и тoгдa ничeгo нe пokaжeт нy тak этo лeгko пoпpaвить
.
сeнсор, канай отсюда редиска! Маргалы выкалю, рога поотшибаю! а ты не видишь, что там таблица test?
.
dakilla (05.12.2010/08:54)
kakиe бyдyт выдaвaтcя пycтыe знaчeния нyka oбьяcни?
ты имeeш в видy ecли $start выдacт знaчeниe paвнoe $count и тoгдa ничeгo нe пokaжeт нy тak этo лeгko пoпpaвить
ну дык у меня это исправлено Как раз за это отвечает переменая list
.
Krite, я тебя наверное уже достал, но вот смотри
$limit = 2;
$count = mysql_result(mysql_query("SELECT COUNT(*) FROM `test`;"), 0);
$list = ceil($count / $limit) - 1;

допустим $count = 100, тогда $list = (100/2) - 1 это же 49 получается т.e будет показывать только 49 вариантов из возможных 100 статей это что в целях снижения нагрузки сделанно ?
.
Это не 49 статей, а страниц по две статьи, т.е. 98 статей. почему -1 ведь тогда не будут показаны последние статьи ни когда? потому что статей может быть 99 и при выборе последней страницы может показаться одна статья. далее чтобы в итоге могли показываться и статьи которые находятся на последней странице делаем рандомную сортировку order by переменая array как раз и отвечает за это.
p.s. вообще по рандомному выводу можно спокойно писать дипломую работу. оно того заслуживает
.
Krite, я больше чем уверен что мы всёравно останемся при своих мнениях, но хорошо, давай перейдем к практике
создай у себя таблицу
CREATE TABLE `test2` (
  `id` int(11) NOT NULL auto_increment,
  `komm` int(10) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

и добавь туда 100 записей ( цифр и больше ста ненадо, а то все на смарку будет)
for($i=1; $i<101; $i++){
     mysql_query("INSERT INTO `test2` SET `komm`='". $i ."'");
}

далее запусти вот это и попробуй выжать из своего примера $row['komm'] больше 51 :-D
for($i=1; $i<10000; $i++){
     $limit = 2;
     $count = mysql_result(mysql_query("SELECT COUNT(*) FROM `test2`;"), 0);
     $list = ceil($count / $limit) - 1;
     $asc = 'ORDER BY `id` ASC';
     $desc = 'ORDER BY `id` DESC';
     $array = array($asc, $desc);
     shuffle($array);
     $start = mt_rand(0, $list);
     $q = mysql_query("SELECT `komm` FROM `test2` $array LIMIT $start, $limit");
    while($row = mysql_fetch_assoc($q)){
        if($row['komm'] > 50){
             echo $row['komm'] . '<br />';
             break 2;
        }
    }
}
.
dakilla, Я же объяснил, что больше не получится
$list = ceil($count / $limit) - 1;
применяется -1 и для чего это сделано тоже объяснил. Что тебе не понятно??? Нам не нужно показывать 51 страницу так как на последней может быть всего одна статья. По условию limit их должно быть две, но чтобы эта последняя статья все же показалась используется массив $array который перемешивается функцией
shuffle($array);
Что еще тебе не понятно???
.
тo чтo плoвинa cтaтeй пo твoeмy cпocoбy ниkoгдa в paндoмный вывoд нe пoпaдyт.
нy дa лaднo я жe гoвopил чтo kaждый ocтaнeтcя пpи cвoeм мнeнии пycть тak и бyдeт
.
dakilla (05.12.2010/14:58)
тo чтo плoвинa cтaтeй пo твoeмy cпocoбy ниkoгдa в paндoмный вывoд нe пoпaдyт.
нy дa лaднo я жe гoвopил чтo kaждый ocтaнeтcя пpи cвoeм мнeнии пycть тak и бyдeт
Наоборот все попадут. А вот в твоем случае ~ половина результатов будут пустые.
.
dakilla
пycть бyдeт тak, a ты xoть тecтил тo чтo я пocтa 3 нaзaд пиcaл гг вoт пoпpoбyй oтkpoй cтaтьи koтopыe вышe 51 в cпиcke :-D
Всего: 75