0 / 0 / 0
Регистрация: 05.04.2015
Сообщений: 2
1

Оптимизировать сложный запрос php+mysql

05.04.2015, 01:59. Показов 764. Ответов 2
Метки нет (Все метки)

Ребят сложный запрос к базе(сильно грузит сервер)... Сам по себе запрос не очень(не я его делал), оптимизировал как смог:
MySQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
SELECT
    STR_ID,
    TEX_TEXT AS STR_DES_TEXT,
    IF(
        EXISTS(
            SELECT
                *
            FROM
                SEARCH_TREE AS SEARCH_TREE2
            WHERE
                SEARCH_TREE2.STR_ID_PARENT <=> SEARCH_TREE.STR_ID
            LIMIT
                1
        ), 1, 0) AS DESCENDANTS
FROM
               SEARCH_TREE
    INNER JOIN DESIGNATIONS ON DES_ID = STR_DES_ID
    INNER JOIN DES_TEXTS ON TEX_ID = DES_TEX_ID
WHERE
    STR_ID_PARENT = 'переменная' AND
    DES_LNG_ID = 16 AND
    EXISTS (
        SELECT
            *
        FROM
                       LINK_GA_STR
            INNER JOIN LINK_LA_TYP ON LAT_TYP_ID = 'переменная' AND
                                      LAT_GA_ID = LGS_GA_ID
            INNER JOIN LINK_ART ON LA_ID = LAT_LA_ID
        WHERE
            LGS_STR_ID = STR_ID
        ORDER BY TEX_TEXT desc
        LIMIT
            1
    )
сам запрос на серваке выполняется секунду. Но проблема, этот запрос к базе изначально выводит список + к этому списку нужно подкрепить дерево его значений(т.е. это список <ul>)+к этому списку еще вывод списка. И всего их до 5ти.
Выглядит это так:
mysql запрос который показал +
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
$tree_all_array = array();
    $lookup = mysqli_query($linktcLi, "$mysql1'$group'$mysql2'$tree_all_id'$mysql3"); // поиск артикула 
        if(mysqli_num_rows($lookup) > 0){  
            while($cross_result = mysqli_fetch_assoc($lookup)){ 
                $tree_all_array[$cross_result['STR_ID']] = $cross_result; // массив поиска
                }}
foreach($tree_all_array as $key => $value){
    if($value['DESCENDANTS'] == 1){
                $lookup = mysqli_query($linktcLi, "$mysql1'{$value['STR_ID']}'$mysql2'$tree_all_id'$mysql3"); // поиск артикула 
        if(mysqli_num_rows($lookup) > 0){ 
            while($cross_result = mysqli_fetch_assoc($lookup)){ 
                $tree_all_array[$value['STR_ID']]['one'][$cross_result['STR_ID']] = $cross_result; // массив поиска
}}}}
foreach($tree_all_array as $key1 => $value){
    if(isset($value['one'])){
    foreach($value['one'] as $key => $value){
  if($value['DESCENDANTS'] == 1){
                $lookup = mysqli_query($linktcLi, "$mysql1'{$value['STR_ID']}'$mysql2'$tree_all_id'$mysql3"); // поиск артикула 
        if(mysqli_num_rows($lookup) > 0){ 
            while($cross_result = mysqli_fetch_assoc($lookup)){ 
                $tree_all_array[$key1]['one'][$key]['two'][$cross_result['STR_ID']] = $cross_result; // массив поиска
}}}}}}
foreach($tree_all_array as $key1 => $value){
    if(isset($value['one'])){
    foreach($value['one'] as $key2 => $value){
        if(isset($value['two'])){
        foreach($value['two'] as $key => $value){
  if($value['DESCENDANTS'] == 1){
                $lookup = mysqli_query($linktcLi, "$mysql1'{$value['STR_ID']}'$mysql2'$tree_all_id'$mysql3"); // поиск артикула 
        if(mysqli_num_rows($lookup) > 0){ 
            while($cross_result = mysqli_fetch_assoc($lookup)){ 
                $tree_all_array[$key1]['one'][$key2]['two'][$key]['tree'][$cross_result['STR_ID']] = $cross_result; // массив поиска
}}}}}}}}
и плюс к этому вывод на странице
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
[HTML]<ul id="techMenuId">
        <? foreach($tree_all_array as $key => $value ){
            if($value['DESCENDANTS'] == 0)$text_arr[] = $value['STR_DES_TEXT'].' (group'.$value['STR_ID'].')';
            if($value['DESCENDANTS'] == 1){
        ?>
        <li><a id="cookIdt<?=$group?>" class="techStyleLi">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<?=$value['STR_DES_TEXT']?></a>
            <ul id="techMenuId2" class='techStyleSection'>
            <?  $i = 100;
                if(isset($value['one'])){ 
                foreach($value['one'] as $key => $value ){
                    if($value['DESCENDANTS'] == 0)$text_arr[] = $value['STR_DES_TEXT'].' (group'.$value['STR_ID'].')';
                $i = $i +1;
                 if($value['DESCENDANTS'] == 1){
            ?>
                <li> <a id="cookIde<?=$i?>" class="techStyleLi">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<?=$value['STR_DES_TEXT']?></a>
                    <ul id="techMenuId3" class='techStyleSection'>
                    <?  
                            if(isset($value['two'])){ 
                            foreach($value['two'] as $key => $value ){
                                if($value['DESCENDANTS'] == 0)$text_arr[] = $value['STR_DES_TEXT'].' (group'.$value['STR_ID'].')';
                        $i = $i +1;
                         if($value['DESCENDANTS'] == 1){
                    ?>
                        <li> <a id="cookIdl<?=$i?>" class="techStyleLi">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<?=$value['STR_DES_TEXT']?></a>
                            <ul id="techMenuId3" class='techStyleSection'>
                            <?  
                                    if(isset($value['tree'])){ 
                                    foreach($value['tree'] as $key => $value ){
                                        if($value['DESCENDANTS'] == 0)$text_arr[] = $value['STR_DES_TEXT'].' (group'.$value['STR_ID'].')';
                                $i = $i +1;
                                 if($value['DESCENDANTS'] == 1){
                            ?>
                                <li> <a class="techNoFollow" href="?id=tree_sort&<?=$value['STR_DES_TEXT']?>-на-<?=$_GET['model']?>&tree_group_id=<?=$value['STR_ID']?>&tree_all_id=<?=$_GET['tree_all_id']?>&tree_id=<?=$_GET['tree_id']?>&model=<?=$_GET['model']?>&typ=<?=$_GET['typ']?>&cod=<?=$_GET['cod']?>&start=<?=$_GET['start']?>&end=<?=$_GET['end']?>&text=<?=$value['STR_DES_TEXT']?>&car=<?=$_GET['car']?>">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<?=$value['STR_DES_TEXT']?></a></li>
                            <?}else{?>
                                <li> <a class="techNoFollow" href="?id=tree_sort&<?=$value['STR_DES_TEXT']?>-на-<?=$_GET['model']?>&tree_group_id=<?=$value['STR_ID']?>&&tree_all_id=<?=$_GET['tree_all_id']?>&tree_id=<?=$_GET['tree_id']?>&model=<?=$_GET['model']?>&typ=<?=$_GET['typ']?>&cod=<?=$_GET['cod']?>&start=<?=$_GET['start']?>&end=<?=$_GET['end']?>&text=<?=$value['STR_DES_TEXT']?>&car=<?=$_GET['car']?>">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<?=$value['STR_DES_TEXT']?></a></li>
                            <?}}}?>
                            </ul>
                        </li>
                    <?}else{?>
                        <li> <a class="techNoFollow" href="?id=tree_sort&<?=$value['STR_DES_TEXT']?>-на-<?=$_GET['model']?>&tree_group_id=<?=$value['STR_ID']?>&tree_all_id=<?=$_GET['tree_all_id']?>&tree_id=<?=$_GET['tree_id']?>&model=<?=$_GET['model']?>&typ=<?=$_GET['typ']?>&cod=<?=$_GET['cod']?>&start=<?=$_GET['start']?>&end=<?=$_GET['end']?>&text=<?=$value['STR_DES_TEXT']?>&car=<?=$_GET['car']?>">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<?=$value['STR_DES_TEXT']?></a></li>
                    <?}}}?>
                    </ul>
            <?}else{?>
                <li> <a class="techNoFollow" href="?id=tree_sort&<?=$value['STR_DES_TEXT']?>-на-<?=$_GET['model']?>&tree_group_id=<?=$value['STR_ID']?>&tree_all_id=<?=$_GET['tree_all_id']?>&tree_id=<?=$_GET['tree_id']?>&model=<?=$_GET['model']?>&typ=<?=$_GET['typ']?>&cod=<?=$_GET['cod']?>&start=<?=$_GET['start']?>&end=<?=$_GET['end']?>&text=<?=$value['STR_DES_TEXT']?>&car=<?=$_GET['car']?>">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<?=$value['STR_DES_TEXT']?></a></li>
                </li>
            <?}}?>  
            </ul>        
        </li>
        <?}}else{?>
        <li><a class="techNoFollow" href="?id=tree_sort&<?=$value['STR_DES_TEXT']?>-на-<?=$_GET['model']?>&tree_group_id=<?=$value['STR_ID']?>&tree_all_id=<?=$_GET['tree_all_id']?>&tree_id=<?=$_GET['tree_id']?>&model=<?=$_GET['model']?>&typ=<?=$_GET['typ']?>&cod=<?=$_GET['cod']?>&start=<?=$_GET['start']?>&end=<?=$_GET['end']?>&text=<?=$value['STR_DES_TEXT']?>&car=<?=$_GET['car']?>">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<?=$value['STR_DES_TEXT']?></a></li>
        <?}};?>
    </ul>[/HTML]
Если нет чего сказать, лучше не сказать, советы типа оооо ну ты грузишь мускул ппц... в другой теме.
Очень буду благодарен за любой совет!
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.04.2015, 01:59
Ответы с готовыми решениями:

сложный запрос к БД (MySQL)
Помогите сформировать запрос. есть бд. в ней с десяток таблиц. в каждой таблице есть поле date. ...

Сложный запрос MySQL
Как в одном запросе извлечь данные о неких элементах в таблице, и попутно с других таблиц прицепить...

Сложный mysql запрос
Здравствуйте дорогие мои друзья. Есть таблица где данные берутся из mysql и она состоит...

mysql выполнить сложный запрос
Вообщем есть масив такого вида Array ( =&gt; Array ( =&gt; 0 ...

2
Эксперт PHP
934 / 692 / 235
Регистрация: 01.02.2015
Сообщений: 1,848
05.04.2015, 02:16 2
Посмотри самый последний пост из данной темы
http://habrahabr.ru/post/171053/comments/
функция построения дерева
также смотри наличие индексов полей которые есть в запросе
1
0 / 0 / 0
Регистрация: 05.04.2015
Сообщений: 2
05.04.2015, 20:13  [ТС] 3
Спасибо, изучу. С индексами все нормально, изучал с эксплэйном. Везде ищет по primary

Добавлено через 1 час 29 минут
Очень классные ответы там, то что нужно. Понял в чем проблема. Нужно переделать запрос + функция про которую писали. Poznakomlus спасибо!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.04.2015, 20:13
Помогаю со студенческими работами здесь

Создать сложный запрос mysql wordpress
Не могли бы вы помочь мне переделать сложный запрос к базе данных с подсчетом постов? Ситуация...

PHP & MySQL передача в запрос SQL значения переменной из PHP
Здравствуйте. Мне необходимо передать в SQL-запрос значение любой переменной. Например, мне...

PHP запрос к БД mysql
На скриншоте есть кусок php кода, там выполняется запрос к бд, для изменения записи с определенным...

Перекрестный запрос PHP mysql
Помогите! Есть код (точнее строка кода): $query = mysql_query(&quot;INSERT INTO T1 (A, B, C, D, E,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru