Мне пришлось работать с очень тупой базой данных, но я не могу ее изменить, поэтому мне нужно найти решение. Как я могу получить несколько информационных строк в 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: Я обновил изображение, чтобы вы лучше поняли мой вопрос.
Очень странная таблица, мой код не будет работать, если какая-то часть цепочки адресов отсутствует. Например, если станции нет и цепь выглядит так: 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 |
+--------+------------+-----------+
если мы предположим, что имя вашей таблицы — Адреса, то самый простой способ может быть следующим:
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