Mysql Страна=>область=>город

Статус: Офлайн
Реєстрація: 04.07.2008
Повідом.: 677
Mysql Страна=>область=>город

Создал три таблицы:
PHP:
CREATE TABLE IF NOT EXISTS `country` (
  `country_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(128) CHARACTER SET cp1251 NOT NULL DEFAULT '',
  `code` varchar(240) NOT NULL,
  `capital` varchar(240) NOT NULL,
  PRIMARY KEY (`country_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=59 ;

PHP:
CREATE TABLE IF NOT EXISTS `region` (
  `region_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `country_id` int(10) unsigned NOT NULL DEFAULT '0',
  `add_reg_id` varchar(10) DEFAULT NULL,
  `name` varchar(64) CHARACTER SET cp1251 NOT NULL DEFAULT '',
  PRIMARY KEY (`region_id`),
  KEY `country_id` (`country_id`),
  KEY `city_id` (`add_reg_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=132 ;
PHP:
CREATE TABLE IF NOT EXISTS `city` (
  `city_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `country_id` int(11) unsigned NOT NULL DEFAULT '0',
  `region_id` int(10) unsigned NOT NULL DEFAULT '0',
  `name` varchar(128) CHARACTER SET cp1251 NOT NULL DEFAULT '',
  `old_id` int(11) NOT NULL,
  PRIMARY KEY (`city_id`),
  KEY `country_id` (`country_id`),
  KEY `region_id` (`region_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=7052 ;

Какой запросы\запросы можно сделать чтобы мне выводилось:
Если есть область то Город=>Страна=>Область
Если нет области то Город=>Страна
Если области нет то в таблице `city` у меня написано region_id=0.
Помогите уже все пробовал, никак не могу вывести запросик
Для примера
PHP:
   $first_country = mysql_query("SELECT country_id,name FROM `country`");
 $j=0;
    while($row=mysql_fetch_array($first_country, MYSQL_NUM))
    {
       // print_r(mysql_fetch_assoc($first_country)."<br />");
        $first_region = mysql_query("SELECT city_id,name FROM `city` where country_id=$row[0]");
        
        while($row2=mysql_fetch_array($first_region, MYSQL_NUM))
        {
             //  print_r(mysql_fetch_assoc($first_region));
            $first_city = mysql_query("SELECT region_id,name FROM `region` where region_id=$row2[0]");
            while($rowr=mysql_fetch_array($first_city, MYSQL_NUM))
             {
                // print_r(mysql_fetch_assoc($first_city)."<br />");
               printf ("$j city: %s region: %s  country: %s  <br/>", $row2[1],$row[1], $rowr[1]);
            
             
             }
        }
         
         $j++;

    }
Выводит данный код сплошной бред . . .
 
Останнє редагування:
Ох уж накрутил :)
Зачем столько циклов?

все в один запрос делается:

Код:
SELECT 
     c.country_id
    ,c.region_id
    ,c.city_id
    ,concat(c.name, '=>', cn.name, ifnull(concat('=>', r.name), '')) AS addr
FROM
  `city` AS c
  INNER JOIN `country` AS cn ON cn.country_id = c.country_id
  LEFT JOIN `region` AS r ON r.country_id = c.country_id AND r.region_id = c.region_id
 
Аааа я в шоке :)Это работает)
Спасибо большое!Пошел изучать мускул с нуля :)
 
спасибо!
 
Назад
Зверху Знизу