Оптимизировать mysql запрос

1 234
BasePelleta
На сайте с 29.05.2008
Offline
120
#21
Согласен на все 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);
}

}
AlexVenga
На сайте с 10.04.2007
Offline
190
#22
BasePelleta:
А сколько строк кода в таких сайтах?

Нельзя мерять программу строками кода!

Я вам на делфи напишу редактор БД ниразу не залезая в код.))))))

Антикризисное предложение: [Бурж, AdSense] [NEW] Сайты - каталоги компаний с гарантией трафа [Дорого] (/ru/forum/1006462)
BasePelleta
На сайте с 29.05.2008
Offline
120
#23
array_rand ();

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

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

LEOnidUKG
На сайте с 25.11.2006
Offline
1773
#24
BasePelleta:
Можно ли пример кода для аналогии?

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

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

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

//Потом выбираем ID

for($i=0;$i<СКОЛЬКО_НУЖНО;$i++)

{

$tmp=$mass[$i];

}

//Теперь через запятую их складываем

$zap=implode(',',$tmp);

//И делаем запрос, вместо rand()

.... WHERE id IN ($zap)....

Теперь у нас в ответке будет сколько нужно случайных строк.

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/
dvaes
На сайте с 03.09.2007
Offline
65
#25

эмм. потер

BasePelleta
На сайте с 29.05.2008
Offline
120
#26

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

//Сначала считывайте в переменную $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

LEOnidUKG
На сайте с 25.11.2006
Offline
1773
#27

BasePelleta, может сначала нужно данные ID считать, а уже потом перемешивать. Как думаете?

+ замените $tmp=$mass[$i]; на $tmp[]=$mass[$i];

jokerov
На сайте с 18.07.2008
Offline
102
#28
LEOnidUKG:

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

Вы путаете array_shift с shuffle

BasePelleta
На сайте с 29.05.2008
Offline
120
#29
jokerov:
Вы путаете array_shift с shuffle

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

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

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

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

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

var_dump($zap); die;

var_dump($zap); выводит string(5) "34,,,"

LEOnidUKG
На сайте с 25.11.2006
Offline
1773
#30
jokerov:
Вы путаете array_shift с shuffle

Да, точно. Эт я просто в другом примере у себя смотрел, там именно нужно была такая сортировка.

BasePelleta, ну и где массив в переменной $masa?

1 234

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий