Нужна помощь

Furilen

Интересующийся
📜
Сообщения
113
Реакции
17
Долго думал куда вопрос написать, решил что тут будет самое место.
Собственно нужна помощь опытных. Есть код.
PHP:
//Проверяем одетые вещи и вещи с сроком годности
            $cl = mysql_query('SELECT
            `iu`.`time_sleep`,`im`.`id`,`im`.`name`,`im`.`img`,`im`.`type`,`im`.`inslot`,`im`.`2h`,`im`.`2too`,`im`.`iznosMAXi`,`im`.`inRazdel`,`im`.`price1`,`im`.`price2`,`im`.`price5`,`im`.`pricerep`,`im`.`magic_chance`,`im`.`info`,`im`.`massa`,`im`.`level`,`im`.`magic_inci`,`im`.`overTypei`,`im`.`group`,`im`.`group_max`,`im`.`geni`,`im`.`ts`,`im`.`srok`,`im`.`class`,`im`.`class_point`,`im`.`anti_class`,`im`.`anti_class_point`,`im`.`max_text`,`im`.`useInBattle`,`im`.`lbtl`,`im`.`lvl_itm`,`im`.`lvl_exp`,`im`.`lvl_aexp`,
            `iu`.`id`,`iu`.`item_id`,`iu`.`1price`,`iu`.`2price`,`iu`.`uid`,`iu`.`use_text`,`iu`.`data`,`iu`.`inOdet`,`iu`.`inShop`,`iu`.`delete`,`iu`.`iznosNOW`,`iu`.`iznosMAX`,`iu`.`gift`,`iu`.`gtxt1`,`iu`.`gtxt2`,`iu`.`kolvo`,`iu`.`geniration`,`iu`.`magic_inc`,`iu`.`maidin`,`iu`.`lastUPD`,`iu`.`timeOver`,`iu`.`overType`,`iu`.`secret_id`,`iu`.`time_create`,`iu`.`time_sleep`,`iu`.`inGroup`,`iu`.`dn_delete`,`iu`.`inTransfer`,`iu`.`post_delivery`,`iu`.`lbtl_`,`iu`.`bexp`,`iu`.`so`,`iu`.`blvl`
            FROM `items_users` AS `iu` LEFT JOIN `items_main` AS `im` ON (`im`.`id` = `iu`.`item_id`) WHERE (`iu`.`inOdet`!="0" OR `iu`.`data` LIKE "%srok%" OR `iu`.`data` LIKE "%vip_sale%" OR `iu`.`iznosNOW` >= `iu`.`iznosMAX` OR `im`.`srok` > 0 OR `iu`.`data` LIKE "%sudba=1%" OR (`iu`.`timeOver`<'.OK.' AND `iu`.`timeOver`!="0")) AND `iu`.`uid`="'.$u['id'].'" AND `iu`.`delete`="0"');
            while($itm = mysql_fetch_assoc($cl)) {
                $po = array();
                $po = $this->lookStats($itm['data']);
                $po['lvl'] = $u['level'];
                //проверяем требования               
                $t = $this->items['tr'];
                $x = 0;
                $notr = 0;
                $j = 1;
                while($j<=4){
                    if(!isset($po['tr_s'.$j]) && $itm['type']!=26){
                        $po['tr_s'.$j] = 0;
                    }
                    $j++;
                }
                while($x < count($t)) {
                  $n = $t[$x];
                  if( isset($po['tr_'.$n]) && $n == 'sex' ) {
                      if( $po['tr_'.$n] != $this->info['sex'] ) {
                         $notr++;
                      }
                  }elseif(isset($po['tr_'.$n])) {
                    if($po['tr_'.$n] > $this->stats[$n] && $n != 'align' && $n != 'align_bs') {
                      $notr++;
                    }
                  }
                  $x++;
                }
                if( $itm['type'] == 31 ) {
                    $notr++;
                }
                if(isset($po['srok']) && $po['srok'] > 0){
                    $itm['srok'] = $po['srok'];
                }
                /*if(isset($po['vip_sale'])) {
                    if($sn['silver'] < 2 && ($itm['time_create']-OK) < 0) {
                        $this->isport($itm['id'],$itm['timeOver'],$itm['overType'],$u['id'],(int)$po['musor2'],$itm['type'],$itm['name']);
                        $notr++;
                    }
                }*/
                if($itm['iznosNOW']>=ceil($itm['iznosMAX']) && $itm['iznosMAXi'] != 999999999){
                    $notr++;   
                }
                if($notr > 0 && $itm['inOdet'] != 0 && ($itm['inOdet'] < 59 || $itm['inOdet'] > 62) ) {
                    //снимаем предмет
                    $this->snatItem($itm['id'],$u['id']);
                    $snIt++;
                }
                
                if( $po['sudba'] == '1' && $po['sudba'] != $this->info['login'] ) {
                    $po['sudba'] = $this->info['login'];
                    $itm['data'] = str_replace('sudba=1','sudba='.$this->info['login'] , $itm['data']);
                    mysql_query('UPDATE `items_users` SET `data` = "'.$itm['data'].'" WHERE `id` = "'.$itm['id'].'" LIMIT 1');
                }
                
                //проверяем срок годности
                //echo '['.$itm['item_id'].']';
                if(isset($_GET['inv'])) {
                    if($itm['iznosNOW']>=ceil($itm['iznosMAX']) && $itm['iznosMAXi'] != 999999999){
                        //предмет сломался
                        if(isset($po['musor'])){
                            if($po['musor']>0){
                                $this->recr($itm['id'],$itm['type'],$u['id'],(int)$po['musor']);
                            }
                        }
                    }elseif($itm['time_create']+$itm['srok'] <= OK && $itm['srok']>0 && $itm['time_sleep'] == 0){
                        if($itm['inOdet']!=0){
                            $this->snatItem($itm['id'],$u['id']);
                            $snIt++;
                        }
                        
                        if(isset($po['upatack_id'])) {
                            $this->addItem($po['upatack_id'],$itm['uid'],'|sudba=1');
                        }
                        if(isset($po['spell_id'])) {
                            $this->addItem($po['spell_id'],$itm['uid'],'|sudba=1');
                        }
                        if(isset($po['rune_id'])) {
                            $this->addItem($po['rune_id'],$itm['uid'],'|sudba=1');
                        }
                        
                        //удаляем предмет
                        $this->isport($itm['id'],$itm['timeOver'],$itm['overType'],$u['id'],(int)$po['musor2'],$itm['type'],$itm['name']);
                    }
                }
                
            }

Проблема в том что вот этот запрос выполняется почти 5 сек, с тем учетом что база еще не особо большая.
PHP:
$cl = mysql_query('SELECT
            `iu`.`time_sleep`,`im`.`id`,`im`.`name`,`im`.`img`,`im`.`type`,`im`.`inslot`,`im`.`2h`,`im`.`2too`,`im`.`iznosMAXi`,`im`.`inRazdel`,`im`.`price1`,`im`.`price2`,`im`.`price5`,`im`.`pricerep`,`im`.`magic_chance`,`im`.`info`,`im`.`massa`,`im`.`level`,`im`.`magic_inci`,`im`.`overTypei`,`im`.`group`,`im`.`group_max`,`im`.`geni`,`im`.`ts`,`im`.`srok`,`im`.`class`,`im`.`class_point`,`im`.`anti_class`,`im`.`anti_class_point`,`im`.`max_text`,`im`.`useInBattle`,`im`.`lbtl`,`im`.`lvl_itm`,`im`.`lvl_exp`,`im`.`lvl_aexp`,
            `iu`.`id`,`iu`.`item_id`,`iu`.`1price`,`iu`.`2price`,`iu`.`uid`,`iu`.`use_text`,`iu`.`data`,`iu`.`inOdet`,`iu`.`inShop`,`iu`.`delete`,`iu`.`iznosNOW`,`iu`.`iznosMAX`,`iu`.`gift`,`iu`.`gtxt1`,`iu`.`gtxt2`,`iu`.`kolvo`,`iu`.`geniration`,`iu`.`magic_inc`,`iu`.`maidin`,`iu`.`lastUPD`,`iu`.`timeOver`,`iu`.`overType`,`iu`.`secret_id`,`iu`.`time_create`,`iu`.`time_sleep`,`iu`.`inGroup`,`iu`.`dn_delete`,`iu`.`inTransfer`,`iu`.`post_delivery`,`iu`.`lbtl_`,`iu`.`bexp`,`iu`.`so`,`iu`.`blvl`
            FROM `items_users` AS `iu` LEFT JOIN `items_main` AS `im` ON (`im`.`id` = `iu`.`item_id`) WHERE (`iu`.`inOdet`!="0" OR `iu`.`data` LIKE "%srok%" OR `iu`.`data` LIKE "%vip_sale%" OR `iu`.`iznosNOW` >= `iu`.`iznosMAX` OR `im`.`srok` > 0 OR `iu`.`data` LIKE "%sudba=1%" OR (`iu`.`timeOver`<'.OK.' AND `iu`.`timeOver`!="0")) AND `iu`.`uid`="'.$u['id'].'" AND `iu`.`delete`="0"');
Моих скудных знаний не хватает что бы это как то упростить (ускорить). Буду очень благодарен если кто то поможет :)
 

Insallah

¯\_(ツ)_/¯
🏆
📜
Сообщения
1,512
Реакции
468
Разверну запрос, а то прямо нечитаемый пиздец.
SQL:
SELECT
    `iu`.`time_sleep`,
    `im`.`id`,
    `im`.`name`,
    `im`.`img`,
    `im`.`type`,
    `im`.`inslot`,
    `im`.`2h`,
    `im`.`2too`,
    `im`.`iznosMAXi`,
    `im`.`inRazdel`,
    `im`.`price1`,
    `im`.`price2`,
    `im`.`price5`,
    `im`.`pricerep`,
    `im`.`magic_chance`,
    `im`.`info`,
    `im`.`massa`,
    `im`.`level`,
    `im`.`magic_inci`,
    `im`.`overTypei`,
    `im`.`group`,
    `im`.`group_max`,
    `im`.`geni`,
    `im`.`ts`,
    `im`.`srok`,
    `im`.`class`,
    `im`.`class_point`,
    `im`.`anti_class`,
    `im`.`anti_class_point`,
    `im`.`max_text`,
    `im`.`useInBattle`,
    `im`.`lbtl`,
    `im`.`lvl_itm`,
    `im`.`lvl_exp`,
    `im`.`lvl_aexp`,
    `iu`.`id`,
    `iu`.`item_id`,
    `iu`.`1price`,
    `iu`.`2price`,
    `iu`.`uid`,
    `iu`.`use_text`,
    `iu`.`data`,
    `iu`.`inOdet`,
    `iu`.`inShop`,
    `iu`.`delete`,
    `iu`.`iznosNOW`,
    `iu`.`iznosMAX`,
    `iu`.`gift`,
    `iu`.`gtxt1`,
    `iu`.`gtxt2`,
    `iu`.`kolvo`,
    `iu`.`geniration`,
    `iu`.`magic_inc`,
    `iu`.`maidin`,
    `iu`.`lastUPD`,
    `iu`.`timeOver`,
    `iu`.`overType`,
    `iu`.`secret_id`,
    `iu`.`time_create`,
    `iu`.`time_sleep`,
    `iu`.`inGroup`,
    `iu`.`dn_delete`,
    `iu`.`inTransfer`,
    `iu`.`post_delivery`,
    `iu`.`lbtl_`,
    `iu`.`bexp`,
    `iu`.`so`,
    `iu`.`blvl`
FROM
    `items_users` AS `iu`
    LEFT JOIN `items_main` AS `im` ON (`im`.`id` = `iu`.`item_id`)
WHERE
    (
        `iu`.`inOdet`!="0" OR
        `iu`.`data` LIKE "%srok%" OR
        `iu`.`data` LIKE "%vip_sale%" OR
        `iu`.`iznosNOW` >= `iu`.`iznosMAX` OR
        `im`.`srok` > 0 OR
        `iu`.`data` LIKE "%sudba=1%" OR
        (
            `iu`.`timeOver`<'.OK.' AND
            `iu`.`timeOver`!="0"
        )
    ) AND
    `iu`.`uid`="'.$u['id'].'" AND
    `iu`.`delete`="0"'

С одной стороны, запрос не особо гипер-тяжёлый. С другой, если хочешь тренироваться на кошках и тюнить по мелочам, посмотри сколько ячеек таблицы ты вызываешь, и какие из них реально используются в твоём while.
Вот это условия я не понял: `iu`.`timeOver`<'.OK.'. По нему получается, что ты ищешь значение меньше чем строка. Либо это константа, которую ты забыл указать в коде.
 

Insallah

¯\_(ツ)_/¯
🏆
📜
Сообщения
1,512
Реакции
468
Было бы нешишним тебе написать что по твоему мнению делает код и что он должен делать. Хорошо поставленная задача — половина ответа.
 

oxy

Знаток
🏆
📜
Сообщения
437
Реакции
104
Почитай о EXPLAIN select... Там тебе покажет ключи без индексов и т.д. и сможешь легко найти горлышко бутылки
 

oxy

Знаток
🏆
📜
Сообщения
437
Реакции
104
Еще я бы посоветовал тебе заменить srok, sudba и прочее на json и вызывать что то в стиле iu.data.srok = 1. Это позволит индексировать данные и поиск ускорится в разы
 

k880TR

Интересующийся
📜
Сообщения
71
Реакции
12
В данном запросе об индексах вряд-ли нужно вспоминать, так как LIKE '%string%' не используется индексация . А тут в запросе таких лайков несколько, можно представить сколько нужно памяти на это все выделить. Тут нужно переписывать весь запрос. Этот кусок во многих сборках встречается кстати и не один раз. Оптимизируйте и будет счастье.
 

evmaster

Некто
Сообщения
7
Реакции
3
По моему опыту, LIKE - это главная причина, а здесь 3 LIKE. Никакие индексы вам не разгонят в разы этот запрос, они лишь помогут процентов на 10.
Заменить можно попробовать на что-то вроде: `data` REGEXP "srok|vip_sale|sudba=1" и замерить время исполнения....
А так в тяжелых случаях лучше перенести в отдельные поля эти значения, тогда будет быстрее в разы, если с индексами.
 

Insallah

¯\_(ツ)_/¯
🏆
📜
Сообщения
1,512
Реакции
468
Это же не базы милионники. У него там дай боже чтобы пару тысяч строчек было.
 

evmaster

Некто
Сообщения
7
Реакции
3
Это же не базы милионники. У него там дай боже чтобы пару тысяч строчек было.
Как раз таки да, миллионники, items_users в моем проекте 1 150 000 строк. И любые Like с этой таблицей работают заметно долго...
 

evmaster

Некто
Сообщения
7
Реакции
3
Да сам уже натыкался не раз, куда не стань - везде одни грабли :)))
 

oxy

Знаток
🏆
📜
Сообщения
437
Реакции
104
Как раз таки да, миллионники, items_users в моем проекте 1 150 000 строк. И любые Like с этой таблицей работают заметно долго...
Полнотекстовый поиск тебе в помощь. Суть - ты создаешь дублирующий индекс с своими данными и все полнотекстовые запросы прогоняешь через match(). Это вернет тебе id записи с мускуля. Ну и их уже выводишь. Я сейчас помогаю челу по проекту, у него порядка 4х лямов записей в базе. Обычный запрос (не like) выполняется у него полторы-две секунды. С лайком вообще беда. Мантикора отдает данные примерно за 0.2 секунды. Если тебе нужно ЕЩЕ БОЛЬШЕ данных, посмотри в сторону кликхауса
 

oxy

Знаток
🏆
📜
Сообщения
437
Реакции
104
Я в свое время боролся весьма костыльным методом. Архивировал данные юзеров которые месяц не заходили в игру в другую бд. Ну и как чел заходит, его данные вытягиваем с бекапа и инсертим в главную базу. Таким образом база становится не такая уж большая.
Так же посмотри в сторону EXPLAIN SELECT. Он тебе покажет узкие места твоего запроса. Может быть стоит добавить индексов, или убрать лишние
 

oxy

Знаток
🏆
📜
Сообщения
437
Реакции
104
Есть еще вариант шардирования на разные табы. Ты заранее знаешь ид пользователя, значит ты можешь по формуле user_id % 4 выбрать в какой табе хранить.

Например у тебя четыре табы:

Код:
items_1
items_2
items_3
items_4

Получается если у нас юзер 1002 то по формуле 1002 % 4 = 2. Значит ищем его в таблице items_2
 

evmaster

Некто
Сообщения
7
Реакции
3
Есть еще вариант шардирования на разные табы. Ты заранее знаешь ид пользователя, значит ты можешь по формуле user_id % 4 выбрать в какой табе хранить.

Например у тебя четыре табы:

Код:
items_1
items_2
items_3
items_4

Получается если у нас юзер 1002 то по формуле 1002 % 4 = 2. Значит ищем его в таблице items_2
А зачем велосипед с таблицами? Есть mysql PARTITION. Я использовал его успешно вполне.
 

Исидур

Некто
📜
Сообщения
19
Реакции
2
Ребят помогите с пещерой,есть пещера гора но она без дропа + мобы в ней слабее чем в безде + за убийство моба не начисляется репа. как настроить гору?
 

Bayer

Специалист
⚖️
🏆
📜
Сообщения
737
Реакции
250
Ребят помогите с пещерой,есть пещера гора но она без дропа + мобы в ней слабее чем в безде + за убийство моба не начисляется репа. как настроить гору?
А чуть логики?
Чуть логики:
Код:
if($smertb_moba == 1){
drop_s_moba();
}else{
echo 'А че не убил моба?';
}
Если ещё чуть логики то прям в функцию победы над кем либо вкинуть проверку кого именно убили и давать за это награду или не давать.
А если функция слишком массивная, то можно ещё чуть подумать и сделать несколько ф-ций под каждые нужды: функция победы над мобами, ф-ция победы над героями и т.п.

@
"мобы в ней слабее чем в безде"

А почему бы, ну там того этого, чекнуть че как этот моб вообще прописан, если статки в базе, то заходим такие и бах: [ICODE ]UPDATE `sila` = `sila` + 100[/ICODE]
 
Последнее редактирование:

Bayer

Специалист
⚖️
🏆
📜
Сообщения
737
Реакции
250
Долго думал куда вопрос написать, решил что тут будет самое место.
Собственно нужна помощь опытных. Есть код.
PHP:
//Проверяем одетые вещи и вещи с сроком годности
            $cl = mysql_query('SELECT
            `iu`.`time_sleep`,`im`.`id`,`im`.`name`,`im`.`img`,`im`.`type`,`im`.`inslot`,`im`.`2h`,`im`.`2too`,`im`.`iznosMAXi`,`im`.`inRazdel`,`im`.`price1`,`im`.`price2`,`im`.`price5`,`im`.`pricerep`,`im`.`magic_chance`,`im`.`info`,`im`.`massa`,`im`.`level`,`im`.`magic_inci`,`im`.`overTypei`,`im`.`group`,`im`.`group_max`,`im`.`geni`,`im`.`ts`,`im`.`srok`,`im`.`class`,`im`.`class_point`,`im`.`anti_class`,`im`.`anti_class_point`,`im`.`max_text`,`im`.`useInBattle`,`im`.`lbtl`,`im`.`lvl_itm`,`im`.`lvl_exp`,`im`.`lvl_aexp`,
            `iu`.`id`,`iu`.`item_id`,`iu`.`1price`,`iu`.`2price`,`iu`.`uid`,`iu`.`use_text`,`iu`.`data`,`iu`.`inOdet`,`iu`.`inShop`,`iu`.`delete`,`iu`.`iznosNOW`,`iu`.`iznosMAX`,`iu`.`gift`,`iu`.`gtxt1`,`iu`.`gtxt2`,`iu`.`kolvo`,`iu`.`geniration`,`iu`.`magic_inc`,`iu`.`maidin`,`iu`.`lastUPD`,`iu`.`timeOver`,`iu`.`overType`,`iu`.`secret_id`,`iu`.`time_create`,`iu`.`time_sleep`,`iu`.`inGroup`,`iu`.`dn_delete`,`iu`.`inTransfer`,`iu`.`post_delivery`,`iu`.`lbtl_`,`iu`.`bexp`,`iu`.`so`,`iu`.`blvl`
            FROM `items_users` AS `iu` LEFT JOIN `items_main` AS `im` ON (`im`.`id` = `iu`.`item_id`) WHERE (`iu`.`inOdet`!="0" OR `iu`.`data` LIKE "%srok%" OR `iu`.`data` LIKE "%vip_sale%" OR `iu`.`iznosNOW` >= `iu`.`iznosMAX` OR `im`.`srok` > 0 OR `iu`.`data` LIKE "%sudba=1%" OR (`iu`.`timeOver`<'.OK.' AND `iu`.`timeOver`!="0")) AND `iu`.`uid`="'.$u['id'].'" AND `iu`.`delete`="0"');
            while($itm = mysql_fetch_assoc($cl)) {
                $po = array();
                $po = $this->lookStats($itm['data']);
                $po['lvl'] = $u['level'];
                //проверяем требования             
                $t = $this->items['tr'];
                $x = 0;
                $notr = 0;
                $j = 1;
                while($j<=4){
                    if(!isset($po['tr_s'.$j]) && $itm['type']!=26){
                        $po['tr_s'.$j] = 0;
                    }
                    $j++;
                }
                while($x < count($t)) {
                  $n = $t[$x];
                  if( isset($po['tr_'.$n]) && $n == 'sex' ) {
                      if( $po['tr_'.$n] != $this->info['sex'] ) {
                         $notr++;
                      }
                  }elseif(isset($po['tr_'.$n])) {
                    if($po['tr_'.$n] > $this->stats[$n] && $n != 'align' && $n != 'align_bs') {
                      $notr++;
                    }
                  }
                  $x++;
                }
                if( $itm['type'] == 31 ) {
                    $notr++;
                }
                if(isset($po['srok']) && $po['srok'] > 0){
                    $itm['srok'] = $po['srok'];
                }
                /*if(isset($po['vip_sale'])) {
                    if($sn['silver'] < 2 && ($itm['time_create']-OK) < 0) {
                        $this->isport($itm['id'],$itm['timeOver'],$itm['overType'],$u['id'],(int)$po['musor2'],$itm['type'],$itm['name']);
                        $notr++;
                    }
                }*/
                if($itm['iznosNOW']>=ceil($itm['iznosMAX']) && $itm['iznosMAXi'] != 999999999){
                    $notr++; 
                }
                if($notr > 0 && $itm['inOdet'] != 0 && ($itm['inOdet'] < 59 || $itm['inOdet'] > 62) ) {
                    //снимаем предмет
                    $this->snatItem($itm['id'],$u['id']);
                    $snIt++;
                }
              
                if( $po['sudba'] == '1' && $po['sudba'] != $this->info['login'] ) {
                    $po['sudba'] = $this->info['login'];
                    $itm['data'] = str_replace('sudba=1','sudba='.$this->info['login'] , $itm['data']);
                    mysql_query('UPDATE `items_users` SET `data` = "'.$itm['data'].'" WHERE `id` = "'.$itm['id'].'" LIMIT 1');
                }
              
                //проверяем срок годности
                //echo '['.$itm['item_id'].']';
                if(isset($_GET['inv'])) {
                    if($itm['iznosNOW']>=ceil($itm['iznosMAX']) && $itm['iznosMAXi'] != 999999999){
                        //предмет сломался
                        if(isset($po['musor'])){
                            if($po['musor']>0){
                                $this->recr($itm['id'],$itm['type'],$u['id'],(int)$po['musor']);
                            }
                        }
                    }elseif($itm['time_create']+$itm['srok'] <= OK && $itm['srok']>0 && $itm['time_sleep'] == 0){
                        if($itm['inOdet']!=0){
                            $this->snatItem($itm['id'],$u['id']);
                            $snIt++;
                        }
                      
                        if(isset($po['upatack_id'])) {
                            $this->addItem($po['upatack_id'],$itm['uid'],'|sudba=1');
                        }
                        if(isset($po['spell_id'])) {
                            $this->addItem($po['spell_id'],$itm['uid'],'|sudba=1');
                        }
                        if(isset($po['rune_id'])) {
                            $this->addItem($po['rune_id'],$itm['uid'],'|sudba=1');
                        }
                      
                        //удаляем предмет
                        $this->isport($itm['id'],$itm['timeOver'],$itm['overType'],$u['id'],(int)$po['musor2'],$itm['type'],$itm['name']);
                    }
                }
              
            }

Проблема в том что вот этот запрос выполняется почти 5 сек, с тем учетом что база еще не особо большая.
PHP:
$cl = mysql_query('SELECT
            `iu`.`time_sleep`,`im`.`id`,`im`.`name`,`im`.`img`,`im`.`type`,`im`.`inslot`,`im`.`2h`,`im`.`2too`,`im`.`iznosMAXi`,`im`.`inRazdel`,`im`.`price1`,`im`.`price2`,`im`.`price5`,`im`.`pricerep`,`im`.`magic_chance`,`im`.`info`,`im`.`massa`,`im`.`level`,`im`.`magic_inci`,`im`.`overTypei`,`im`.`group`,`im`.`group_max`,`im`.`geni`,`im`.`ts`,`im`.`srok`,`im`.`class`,`im`.`class_point`,`im`.`anti_class`,`im`.`anti_class_point`,`im`.`max_text`,`im`.`useInBattle`,`im`.`lbtl`,`im`.`lvl_itm`,`im`.`lvl_exp`,`im`.`lvl_aexp`,
            `iu`.`id`,`iu`.`item_id`,`iu`.`1price`,`iu`.`2price`,`iu`.`uid`,`iu`.`use_text`,`iu`.`data`,`iu`.`inOdet`,`iu`.`inShop`,`iu`.`delete`,`iu`.`iznosNOW`,`iu`.`iznosMAX`,`iu`.`gift`,`iu`.`gtxt1`,`iu`.`gtxt2`,`iu`.`kolvo`,`iu`.`geniration`,`iu`.`magic_inc`,`iu`.`maidin`,`iu`.`lastUPD`,`iu`.`timeOver`,`iu`.`overType`,`iu`.`secret_id`,`iu`.`time_create`,`iu`.`time_sleep`,`iu`.`inGroup`,`iu`.`dn_delete`,`iu`.`inTransfer`,`iu`.`post_delivery`,`iu`.`lbtl_`,`iu`.`bexp`,`iu`.`so`,`iu`.`blvl`
            FROM `items_users` AS `iu` LEFT JOIN `items_main` AS `im` ON (`im`.`id` = `iu`.`item_id`) WHERE (`iu`.`inOdet`!="0" OR `iu`.`data` LIKE "%srok%" OR `iu`.`data` LIKE "%vip_sale%" OR `iu`.`iznosNOW` >= `iu`.`iznosMAX` OR `im`.`srok` > 0 OR `iu`.`data` LIKE "%sudba=1%" OR (`iu`.`timeOver`<'.OK.' AND `iu`.`timeOver`!="0")) AND `iu`.`uid`="'.$u['id'].'" AND `iu`.`delete`="0"');
Моих скудных знаний не хватает что бы это как то упростить (ускорить). Буду очень благодарен если кто то поможет :)
мммм запрос в миллион строк, то что я люблю.
Зачем вообще столько всего проверять? У челобаса(игрока, персонажа, аватара, героя, юзера) есть 4 параметра, ну там 5, ну 6 окей, проверяем совпадает ли array(magaz_statki) = array(user_statki). Вот эти строки как "раздел", "тип предмета", вообще такие лишние прям ну вот совсем ненужные, нужно сортировать нож это или дубина? сортируем и проверяем по названию, по картинке(по пути картинки), есть же уже определяющие идентификаторы и их достаточно, нет же в бк код с миллионом различных идентификаторов которые не имеют смысла.
Думаю уже понял к чему клоню, да и выше уже сказали собственно, что посмотри что конкретно задействуется, убири эти лайки(только не под моей аватаркой), а ещё у тебя 3 цикла там выполняются, кайфуши чисто, while на отдыхе
 
Сверху