Snake800

Snake800
Рейтинг
238
Регистрация
02.02.2011
(_._)
LEOnidUKG #:

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

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

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

Если 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"];
}

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

Не парьтесь вы с этим id. Надо сокращать количество запросов. Уверен, что это можно реализовать относительно легко и, если повезёт, может быть даже не поломав сайт. В те времена код обычно был не сильно мудрёным.
Kaavain #:
Не?

Не. Да, часто есть смысл разбивать сложный запрос на несколько, но 1150 sql запросов на страницу это оверхед. Если уж очень нужно кидать запрос на получение иерархии предков для каждого выводимого элемента например, стоит посмотреть в сторону рекурсивных запросов CTE. А вообще такие объекты как правило кэшируются в виде связанных списков. Или решается одним или небольшой группой запросов, в зависимости от рабочих задач и природы данных.

Kaavain #:
Зачем СЕЛЕКТ айди когда ГДЕ айди = ...?

Это не сильно критично. Id всё равно (наверное) кластеризованный индекс, его включение в select при условии отбора по id не стоит и копеек. А вот качество кода без него может заметно страдать или быть обусловлено требованиями фрэймворка.

Kaavain #:
SELECT id, id_parent FROM `content` WHERE id=ххх

Очень похоже, что это запрос из цикла кода, строящего какой-то иерархический список.

sagamorr #:
Сделать антифрод не может

Скорее не хочет. Достаточно было бы скормить нейронке записи Вебвизора ботов и не ботов. Их же видно.

bestbestbest #:
Этих картинок в китайском интернете точно нет, я проверял, они там не находятся.

Икали Гуглом или Baidu? Проверяли, что Вам подсказал Владимир в первом ответе на вопрос "Но пользуются ли китайцы гуглом?"?

Djezzy #:
Какие результаты кто установил порог CPMV? 
В английском языке принято в названиях писать каждое слово с большой буквы.
Всего: 2066