Autor Zpráva
Kateřina
Profil *
Ahojte,
mám tady jednu aplikaci, kterou bych si ráda spustila. Udělala jsem si výpis států, což bylo jednoduché, ale vůbec nevím, jak udělat výpis měst dle vybraného státu, tj. vemu nějaký stát a potřebuji k němu vypsat dané města, tj. CITY. Posílám Vám radši celé tabulky.

Za mySQL dotaz Vám moc děkuji


DROP TABLE IF EXISTS `city`;
CREATE TABLE `city` (
  `id` int(11) NOT NULL auto_increment,
  `slug` varchar(255) NOT NULL,
  `title` varchar(255) NOT NULL,
  `latitude` varchar(255) NOT NULL,
  `longitude` varchar(255) NOT NULL,
  `state_id` int(11) NOT NULL,
  `country_code` char(2) NOT NULL,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `slug` (`slug`),
  KEY `state_id` (`state_id`,`country_code`),
  KEY `country_code` (`country_code`)
) ENGINE=MyISAM AUTO_INCREMENT=64322 DEFAULT CHARSET=utf8;


DROP TABLE IF EXISTS `state`;
CREATE TABLE `state` (
  `id` int(11) NOT NULL,
  `slug` varchar(255) NOT NULL,
  `title` varchar(255) NOT NULL,
  `country_code` char(2) NOT NULL,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `slug` (`slug`),
  KEY `country_code` (`country_code`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Audio
Profil
Předně si myslim, že country_code by měl být pouze v tabulce state, jinak dochází k duplikaci dat (když budeš měnit country_code u nějakého státu, tak ho bude muset změnit i u všech měst daného státu a to je práce navíc).


K dotazu: pokud máš přímo ID libovolného státu, stačí použít dotaz:
SELECT * FROM city WHERE state_id = 1
(místo jedničky dosaď libovolné ID státu).


Máš-li k dispozici jinou informaci o státu, například jen country_code, použij dotaz, který spojí tabulky podle ID státu:
SELECT * FROM city c JOIN state s ON c.state_id = s.id WHERE s.country_code = 'cs'
(opět místo 'cs' dosaď libovolnou hodnotu country_code.

Druhý jmenovaný dotaz pracuje tak, že spojí města se státy podle ID státu a následně vybere jen města, jejichž stát má zadaný country_code.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0