powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Вывод данных из двух связанных таблиц
11 сообщений из 11, страница 1 из 1
Вывод данных из двух связанных таблиц
    #38462628
linnard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго $времени_суток !

В общем есть две таблицы:

1. country
- id (айди страны)
- nameCountry (Название страны)
2. city
- id (айди города)
- nameCity (Название города)
- idCountry (айди страны)

Мне нужно вывести такой список из этих двух таблиц:
Россия
- Москва
- Санкт-Петербург
- Владивосток
Украина
- Киев
- Одесса

Для этого я использую запрос:

Код: sql
1.
mysql_query("SELECT co.*, ci.* FROM country AS co INNER JOIN city AS ci ON ci.id=co.id ");



Но при выводе через mysql_fetch_array() постоянно выводит название страны, когда оно должно вывестись один раз. Можно повставлять кучу условий в этот цикл, но хочется без них. Чтобы выбирало на каждый список городов - одну страну. Способен ли мускул на такое?
...
Рейтинг: 0 / 0
Вывод данных из двух связанных таблиц
    #38462654
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
linnard,

Пиши хранимую процедуру.
...
Рейтинг: 0 / 0
Вывод данных из двух связанных таблиц
    #38462660
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
linnard,

Хотя можно наверное и на клиенте. Запоминаешь имя страны. Если оно такое-же, как при предыдущем выводе - выводишь вместо него пробел. Если сменилось - выводишь имя и опять запоминаешь.

Примерно так:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
 $country=''; $city='';
 while ( $row=fetch (....) )
   {
     if ($country != $row->COUNTRY)
       {
          print("$row->COUNTRY");
          $country=$row->COUNTRY;
       }
     else print(" ");
    print("$row->CITY");
   }
...
Рейтинг: 0 / 0
Вывод данных из двух связанных таблиц
    #38462678
linnard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DarkMaster,

Спасибо, этим способом я и пользуюсь... но эти if-ы в цикле меня смущают.. выходит что это единственный вариант?
...
Рейтинг: 0 / 0
Вывод данных из двух связанных таблиц
    #38462829
авторвыходит что это единственный вариант?
Код: php
1.
SELECT country.nameCountry country, group_concat(city.nameCity) cities FROM country LEFT JOIN city ON country.id=city.idCountry;


Код: php
1.
2.
3.
4.
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    var_dump($row['country']);  
    var_dump(explode(',', $row['cities']));
}


+/- относительно твоего случая
...
Рейтинг: 0 / 0
Вывод данных из двух связанных таблиц
    #38462868
linnard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
как-то так...,

Спасибо, необычно. ща попробую
...
Рейтинг: 0 / 0
Вывод данных из двух связанных таблиц
    #38467164
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
linnard,

Обычно делается вот так

Код: php
1.
2.
3.
4.
5.
$arr = array();

while($row = $mysqli->fetch_assoc()) {
  $arr[$row['country_name']][] = $row['city_name'];
}



разумеется будет получен массив массивов, а как еще иначе отобразить дерево?

Код: php
1.
2.
3.
foreach($arr as $country => $cities) {
// Рендерите дерево
}
...
Рейтинг: 0 / 0
Вывод данных из двух связанных таблиц
    #38467165
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно будет полезно объяснить.

В php массивов нет, есть balanced tree, или по-реляционному nested set. С этим деревом мы и работаем когда создаем переменные, массивы и объекты.

В примере выше происходит обычная группировка. Которую можно перенести и в запрос, что сделает его сугубым, то есть подходящим единственно в качестве зытычки.

Когда мы пишем в $arr[$row['country_name']] еще один массив [] в который пишем $row['city_name'] или что там было, то, если в balanced tree _был_ такой элемент, с таким именем, например Россия, то он вернется нам как таковой, а если не было - такой элемент будет создан и вернется как таковой. Все просто.
...
Рейтинг: 0 / 0
Вывод данных из двух связанных таблиц
    #38467166
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Другими словами мы создаем переменную с именем Россия, то есть используем значение поля из бд как ключ поля для другого значения из бд.
...
Рейтинг: 0 / 0
Вывод данных из двух связанных таблиц
    #38467169
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
linnard,

Запрос не рабочий вообще. Отношения по id-id не существует. Вот так должно быть:

Код: sql
1.
select * from city join country on city.idCountry = country.id;
...
Рейтинг: 0 / 0
Вывод данных из двух связанных таблиц
    #38467172
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кнопки редактировать тут не предвидится. Подумал что рендер ТС не осилит, а мне интересно для rowspan нарисовать, пока что приходилось только colspan.

Скелет рендера иерархии глубиной 1 в таблицу. В левой колонке страна, в правой - ее города.

Код: php
1.
2.
3.
4.
5.
6.
$table = array();
foreach($arr as $country => $cities) { // $cities === массив городов страны $country
  $table[] = '<tr><td rowspan="' . count($cities) . '">' . $country;
  $table[] = '<td>' . join('<tr><td>', $cities);
}
echo '<table><tr><th>Country<th>City' . join(PHP_EOL, $table) . '</table>';
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Вывод данных из двух связанных таблиц
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]