Как получить информацию через несколько строк в MySQL / Stack Overflow

Мне пришлось работать с очень тупой базой данных, но я не могу ее изменить, поэтому мне нужно найти решение. Как я могу получить несколько информационных строк в MySQL / PHP?

введите описание изображения здесь

Вот таблица, с которой я работаю. Мне нужно получить полный адрес — «Городской район, улица, дом, квартира», используя group_id.

Что-то вроде:

SELECT name FROM table WHERE id = 6 AND group_id = existing table row id.

И так далее, пока цикл достигает group_id = 0, И мне нужен результат, объединенный в одну строку.

Другими словами, мне нужно перебрать каждую строку, где group_id = id, а group_id достигает 0, и объединить результат в одну строку.

Является ли это возможным? Или может я неправильно копаю?

Заранее спасибо!

PS: Боже мой, я не могу понять логику людей … Почему вы дали мне минусы за этот вопрос? Я не сделал эту базу данных, я просто жертва и, к сожалению, должен ее использовать. Я задал вопрос, а вы дали мне минусы за что? Для идиотской базы данных? Без комментариев…

Для тех, кто пытается мне помочь — я действительно ценю это.

PPS: Я обновил изображение, чтобы вы лучше поняли мой вопрос.

-3

Решение

Очень странная таблица, мой код не будет работать, если какая-то часть цепочки адресов отсутствует. Например, если станции нет и цепь выглядит так: 5-4-2-1-0.

select a.name as city, b.name as district, c.name as station ...
from address as a
left join address as b on a.id = b.group_id
left join address as c on b.id = c.group_id
...
where a.id = 1;

Таблица:

mysql> select * from address;
+------+----------+-------------+
| id   | group_id | name        |
+------+----------+-------------+
|    1 |        0 | City        |
|    2 |        1 | District    |
|    3 |        2 | Station     |
|    4 |        3 | Street      |
|    5 |        4 | House       |
|    6 |        5 | Apartment   |
|    7 |        0 | City 1      |
|    8 |        7 | District 1  |
|    9 |        8 | Station 1   |
|   10 |        9 | Street 1    |
|   11 |       10 | House 1     |
|   12 |       11 | Apartment 1 |
+------+----------+-------------+

Запрос:

select a.name as city, b.name as district, c.name as station
from address as a
left join address as b on a.id = b.group_id
left join address as c on b.id = c.group_id
where a.group_id = 0;

Результат:

+--------+------------+-----------+
| city   | district   | station   |
+--------+------------+-----------+
| City   | District   | Station   |
| City 1 | District 1 | Station 1 |
+--------+------------+-----------+
0

Другие решения

если мы предположим, что имя вашей таблицы — Адреса, то самый простой способ может быть следующим:

select A1.City, A2.district, A3.station, A4.street, A5.house, A6.apartment
from addresses A1 join addresses A2 on A1.id = A2.group_id
join addresses A3 on A2.id = A3.group_id
join addresses A4 on A3.id = A4.group_id
join addresses A5 on A4.id = A5.group_id
join addresses A6 on A5.id = A6.group_id
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector