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

1 234
BasePelleta
На сайте с 29.05.2008
Offline
120
#31
LEOnidUKG:
BasePelleta, может сначала нужно данные ID считать, а уже потом перемешивать. Как думаете?

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

Вы это имели ввиду ?

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

var_dump($tmp); выводит array(4) { [0]=> string(3) "339" [1]=> NULL [2]=> NULL [3]=> NULL }

var_dump($zap); выводит string(6) "339,,,"

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

var_dump($mass) сделайте сначала.

Ещё наверное проверку нужно сделать, если в $mass <$i то break;

Я думал, вы разбираетесь в программировании, коль тут спрашиваете.

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/
BasePelleta
На сайте с 29.05.2008
Offline
120
#33
LEOnidUKG:
var_dump($mass) сделайте сначала.

Ещё наверное проверку нужно сделать, если в $mass <$i то break;

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

array(1) { ["count(*)"]=> string(3) "339" }

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

Зачем тут появился count(*)?!

BasePelleta
На сайте с 29.05.2008
Offline
120
#35
LEOnidUKG:
Зачем тут появился count(*)?!

может сначала нужно данные ID считать


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

array(1) { ["link_id"]=> string(2) "34" }

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

Теперь вместо:

$tmp[]=$mass[$i];

пишите:

$tmp[]=$mass[$i]['link_id'];

BasePelleta
На сайте с 29.05.2008
Offline
120
#37
LEOnidUKG:
Теперь вместо:

$tmp[]=$mass[$i];
пишите:

$tmp[]=$mass[$i]['link_id'];

Сделал

print_r($tmp); die; вывел Array ( [0] => 3 [1] => [2] => [3] => )

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

а что в print_r($mass); ?

Если что поменяйте:

$tmp[]=$mass[$i]['link_id'];

на

$tmp[]=$mass['link_id'][$i];

BasePelleta
На сайте с 29.05.2008
Offline
120
#39
а что в print_r($mass); ?

array(1) { ["link_id"]=> string(2) "34" }


Если что поменяйте:

$tmp[]=$mass[$i]['link_id'];
на
$tmp[]=$mass['link_id'][$i];

print_r($tmp); die;

Array ( [0] => [1] => [2] => [3] => )

BasePelleta добавил 25.08.2011 в 10:37

Вроде бы вывод print_r($mass); говорит, что запрос правильный?

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

Вот так работает:

  $mass = $db->one_col_array("SELECT link_id FROM ".TBL_ARTICLE." WHERE catid=\"".$a_Ad['catid']."\"

AND bb_region_id IN (".get_cats($reg_id, RegTable('Regions','category')).") ");

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

//Потом выбираем ID
$tmp = array_slice($mass, 0, 3);

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

$ql = 'SELECT link_id AS o_id,'.$TITLE_FIELD.' AS o_title, images AS o_images, bb_descr AS o_descr FROM '.TBL_AD.
' WHERE link_id IN ('.$zap.')'.
FilterSQL().' ORDER BY link_id DESC LIMIT 3';

Мои ошибки:

1. one_col_array - запутался с методом

2. $tmp = array_slice($mass, 0, 3); а не $tmp[]=$mass[$i]['link_id'];

Тема исчерпана!

1 234

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