Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 05.04.2015
Сообщений: 2

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

05.04.2015, 01:59. Показов 959. Ответов 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.04.2015, 01:59
Ответы с готовыми решениями:

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

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

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

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

Добавлено через 1 час 29 минут
Очень классные ответы там, то что нужно. Понял в чем проблема. Нужно переделать запрос + функция про которую писали. Poznakomlus спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.04.2015, 20:13
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru