BasePelleta

BasePelleta
Рейтинг
120
Регистрация
29.05.2008

Делаю так и вижу, что допускаю ошибку!

//Сначала считывайте в переменную $mass все ID из таблицы запросом.

//Потом делайте:

$mass = array_shift($mass); //Это перемешает массив.

$mass = $db->one_assoc( "SELECT link_id FROM ".TBL_AD." where catid=\"".$a_Ad['catid']."\"" );

//Потом выбираем ID
for($i=0;$i<4;$i++)
{
$tmp=$mass[$i];
}

//Теперь через запятую их складываем
$zap=implode(',',$tmp);

var_dump($zap); die;

Получаю ворнинги

Warning: array_shift() [function.array-shift]: The argument should be an array in on line 21

Warning: implode() [function.implode]: Invalid arguments passed in on line 27

$zap = NULL

rame0:
Ну во-первых нужно заняться нормализацией БД. Т.е. сделать отдельную таблицу всевозможных статусов:

Такая таблица есть


А в таблицу пользователей записывать только числовое id - это сократит как размер БД, так и увеличит производительность

Очень интересно!

array_rand ();

Потом построить запрос

Можно ли пример кода для аналогии?

Согласен на все 100%!!!
по этому раз в пол года переписываю некоторые сайты с 0....

А сколько строк кода в таких сайтах?

Так что ТС, прекращайте плодить прогерские топики и делайте "чтоб работало", когда будет тормозить нещадно от наплыва народа - уже и денег будет достаточно на нормального архитектора-програмисто, способного все предусмотреть и заложить зарание.

Согласен. Вариант, предложенный через массив, бует быстрее, значит на нем следует и остановиться!

Считывайте все ID из таблицы, потом через PHP выбирайте рандомом из этого массива 1 значения и делайте уже запрос с точным ID и LIMIT 1

function Random_Related_Articles(&$tpl){


global $db,$a_Ad,$TITLE_FIELD;
$reg_id = REGION_CRITERION;

$ql = 'SELECT link_id AS o_id,'.$TITLE_FIELD.' AS o_title, images AS o_images, b_descr AS o_descr, rand() AS rnd FROM '.TBL_AD.
' WHERE catid="'.$a_Ad['catid'].'"AND _region_id IN ('.get_daughter_cats($reg_id, ModTable('Regions','category')).')
'.FilterGetSQL().' GROUP BY link_id ORDER BY rnd LIMIT 4';


$res = $db->query($ql);

while($v = mysql_fetch_assoc($res)){

array_rand ();

Потом построить запрос


$tpl->AddCell('b_Random_Related_Articles',$v);
}

}
Рандом для МуСКУЛ это сразу слоу квери....

Не знал, что так критично ...

BasePelleta, для чего нужно число после названия статуса?

Сессия. Сейчас уточню.

создаю файл с серилизованной выборкой нужных полей БД (все поля короткие)
При обращении к странице проверяю сколько файл прожил и не пора ли его заменить, затем либо расерилизовываю в данные и вывожу, либо генерю новые, пишу в файл и вывожу.

Тока из файла надо читать не долгим и тяжелым fopen fread fclose - это дольше чем МуСКУЛ, а прочто filegetcontent/

Если места на диске до жопы то можно после проверки что файл нормальный сразу path_thru делать и он вообще моментом на экран выскочит...

Подход интересный, но если новостей, к примеру 1000, то создается столько же файлов....

, а если есть кэширование, то необходимость в файлах посредственна.

В первом посте при нерандомном запросе, блок для релевантных статей уходил в кэш и жил там до обновления.

При добавлении рандома в sql-запрос, при каждом обновлении в браузере новости, стал рандомно меняться список релевантных статей, для каждой новости свой.

AlexVenga,

у меня таких файлов 85к и обновляютя раз в сутки, но не по крону а по дате обновления файла чтобы не все сразу - работает прекрасно

А текстовый файл инклудишь и выводишь на странице?

BasePelleta добавил 24.08.2011 в 16:03

Joker-jar:
Один блок = один файл. А на скольких страницах этот блок не важно. Либо я вас не до конца понял.

Если, к примеру 10 страниц, то для каждой генерятся рандомно свои 4 новости.

Читать этот блок из текстового файла. Текстовый файл обновлять кроном (либо то же самое сделать непосредственно на PHP. Если таймаут прошел, вытаскиваем из БД, заносим в файл, отображаем, иначе отображаем из файла)

Вариант такой имеется и он работает для одной страницы с новостью, а если страниц больше 1, то бля каждой создавать текстовый файл ?

Считывайте все ID из таблицы, потом через PHP выбирайте рандомом из этого массива 1 значения и делайте уже запрос с точным ID и LIMIT 1

А если мне нужно от 3-10 значений в зависимости от настроек?

Всего: 226