Как отследить источник запросов к SQL

Kaavain
На сайте с 28.07.2015
Offline
133
#41

Так, придумал версию 2 с определением уровня каталога... Вернусь - буду испытывать

function level($id) {
        $array_top = mysql_query("SELECT id FROM `content` WHERE id_parent='0'");
        $array_top = mysql_fetch_array($array_top);
        if (in_array($id,$array_top)) {
                $level = 1;
        } else {
                $level = 0;
                while ($id > 0) {
                        $result = mysql_query("SELECT id,id_parent FROM `content` WHERE id='$id'");
                        $myrow = mysql_fetch_array($result);
                        $id_parent = $myrow["id_parent"];
                        $level = $level+1;
                        $id = $id_parent;
                }
        }
        echo "<script>console.log('Level result: " . $level . "//n');</script>";
        return $level;
}
Могу порекомендовать только хостинг: https://traf.at/vps - за 3 года все на 4++ и цены не подняли. Ну и банк для белых ИП: https://traf.at/bankm
LEOnidUKG
На сайте с 25.11.2006
Offline
1723
#42
Kaavain #:
Так, придумал версию 2

А может быть СРАЗУ в переменную выгрузить все эти id,id_parent и уже с ними работать, чем долбить mysql этими мелочными запросами?

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/
Snake800
На сайте с 02.02.2011
Online
215
#43

Если MySQL версии 8.x, уровень вложенности можно получить таким запросом (результат 1 -  нет предка, 2 - один предок и т.д.):

WITH RECURSIVE cte (id, id_parent, depth ) AS
(
  SELECT id, id_parent, 1 as depth FROM `content` WHERE id=[id, для которого ищем глубину вложенности]
  UNION ALL
  SELECT c.id, c.id_parent, cte.depth+1 FROM `content` c JOIN cte
  ON c.id=cte.id_parent
)
SELECT max(depth) as level FROM cte

Тогда метод можно трансформировать таким образом:

function level($id) {
        $result = mysql_query("WITH RECURSIVE cte (id, id_parent, depth ) AS (SELECT id, id_parent, 1 as depth FROM `content` WHERE id='$id' UNION ALL SELECT c.id, c.id_parent, cte.depth+1 FROM `content` c JOIN cte ON c.id=cte.id_parent) SELECT max(depth) as level FROM cte");
        $myrow = mysql_fetch_array($result);
        return $myrow["level"];
}

Без циклов и одним запросом

LEOnidUKG
На сайте с 25.11.2006
Offline
1723
#44
Snake800 #:
Без циклов и одним запросом

Да... давайте простейшую задачу усложним до безумия, именно так я это вижу.

Snake800
На сайте с 02.02.2011
Online
215
#45
LEOnidUKG #:

Да... давайте простейшую задачу усложним до безумия, именно так я это вижу.

Обычный рекурсивный джойн, ничего сложного. А вот если
LEOnidUKG #:
СРАЗУ в переменную выгрузить все эти id,id_parent и уже с ними работать

то получим табличку, предположительно на 7000 строк, которую всё равно надо будет обсчитывать для получения уровня вложенности каждого из id.

LEOnidUKG
На сайте с 25.11.2006
Offline
1723
#46
Snake800 #:
обсчитывать для получения уровня вложенности каждого из id.

Да, но я могу предположить, что в PHP это сделается быстрее т.к. он заточен на такие задачи. А вот всё это вычислять в MySQL и на постоянную основу, я бы не рекомендовал.

Kaavain
На сайте с 28.07.2015
Offline
133
#47
LEOnidUKG #:

Да, но я могу предположить, что в PHP это сделается быстрее т.к. он заточен на такие задачи. А вот всё это вычислять в MySQL и на постоянную основу, я бы не рекомендовал.

Вижу уже тупость в своем варианте. И потом это функция, она вызывается дохренеллион раз. Решил пихну-ка я в сессию список верхних разделов, их всего-то от трех до шести...

W1
На сайте с 22.01.2021
Offline
285
#48
Kaavain #:
пихну-ка я в сессию список верхних разделов

Эка занесло...

Мой форум - https://webinfo.guru –Там я всегда на связи
LEOnidUKG
На сайте с 25.11.2006
Offline
1723
#49
Kaavain #:

Вижу уже тупость в своем варианте. И потом это функция, она вызывается дохренеллион раз. Решил пихну-ка я в сессию список верхних разделов, их всего-то от трех до шести...

Кэш это хорошо... но зачем в сессию то? Положите просто в файлик и всё.

Kaavain
На сайте с 28.07.2015
Offline
133
#50
webinfo #:

Эка занесло...

Да. Глупо. Но я только сейчас узнал, что кроме $_REQUEST есть $_GLOBALS

Счас, младший поплавает в бассейне, я до клавы доберусь. Уничтожу еще пару сотен тараканов. 

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