@freshik312

Как найти в базе похожие записи?

Добрый день !
Есть база:
id |    name   | pid | width
1  |    test   |  0  | 0
2  |  test (2) |  0  | 0
3  |   othre   |  0  | 0
4  |  test (6) |  0  | 0
5  | other (3) |  0  | 0


Нужно сделать перебор по строкам и сделать что то на подобии поиска дочерних элементов.
Логика, ищем все записи, где pid = 0 и width = 0, потом из полученного результата проходимся по всем записям.. Нужно найти все элементы, которые похожи по названию (в примере базы есть строки у которых общее название test, отличие только то, что в скобках), если у найденного элемента нету скобок - родительский элемент, если есть скобки - дочерний. исходя из этого нужно всем дочерним элементам установить id родительского в pid, а так же цифру из скобок поместить в width

Т.е. нужно получить:
id |    name   | pid | width
1  |    test   |  0  | 0
2  |  test (2) |  1  | 2
3  |   othre   |  0  | 0
4  |  test (6) |  1  | 6
5  | other (3) |  3  | 3


Подскажите как я могу это реализовать при помощи php и sql ? было бы невероятно хорошо, если выйдет на уровне, только, sql
  • Вопрос задан
  • 105 просмотров
Решения вопроса 1
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
разовая, когда из импорта приходят данные,
Тогда достаточно банально,
селект где pid = 0 и width = 0,
затем уже в пыхе перебор строк,
експлодим name пробелом,
выбираем все строки где name теперь массив длинной 1(это будут корни) в отдельный массив
и ключами в этом массиве делаем name.
Еще один раз перебираем массив строк с проверкой или массив длинной более 1 в name,
после чего из name[1] вытаскиваем чистую цифру(убираем скобки), записываем в width,
из name[0] получаем ключ к массиву корней, из которого достаем id, и кладем в pid.
Всё, строчки упдэйтнуть в базу.

Вполне возможно где-то можно улучшить алгоритм, но "в лоб" - это самый очевидный вариант.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
А смысл? У вас `pid` указывает на `id` родителя.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Alytics Москва
от 100 000 до 120 000 руб.
Alytics Зеленоград
от 100 000 до 120 000 руб.
БюроБюро Калининград
от 60 000 до 120 000 руб.
22 окт. 2019, в 05:27
10000 руб./за проект
22 окт. 2019, в 00:09
3500 руб./за проект