在查询执行之前使用查询中的值(PHP / MySQL)

时间:2014-01-26 23:51:36

标签: mysql sql

以下查询可以正常工作 - 只要网址集中在美国50个州中的一个州(例如MySite / World / Arizona)。

SELECT GG.N, GG.IDArea MyID,
 GG.Name GName, GG.FIPS, GG.NameAlph, GG.Type, GG.**IDParent**, GG.Parent, GG.IDReg, GG.Pre, GG.Post,  GG.CIA, 
GP.IDArea GPIDArea, GP.IDParent2, GS.N, GS.IDArea SymArea, GS.URL, GS.PostURL, GS.Unique, GS.Title,   GS.Subtitle,   GS.MyKind2, GS.Symbol, GS.Latin, GS.Desig, GS.DesigGen, GS.DesigGroup, GS.Date, GS.Dupe,
GM.Motto, GM.Language, ART.ID, ART.PostURL, ART.Article
FROM gw_geog GG
LEFT JOIN gs GS ON GS.IDArea = GG.IDArea
LEFT JOIN gw_geog_par2 GP ON GP.IDArea = GG.IDArea
LEFT JOIN gs2_motto GM ON GM.Motto = GS.Symbol
LEFT JOIN gs_articles_world_**usa** ART ON ART.ID = GS.IDArea AND ART.PostURL = GS.PostURL
WHERE GG.Name = :MyURL AND
ORDER BY GS.N

但是,它不适用于MySite / World / Japan。问题是数据库表gs_articles_world_usa。它是一系列表格中的一个,最后三个字母代表一个国家的父母。 (在这种情况下,日本的父母是Eurasia,缩写为eur。)

幸运的是,这些父ID存储在其中一个表中 - gw_geog,在字段IDParent中。所以我应该能够将gs_articles_word_usa更改为gs_articles_world_ $ IDParent。

显而易见的问题是$ IDParent - $ IDParent = $ row ['IDParent']的值 - 在查询完成执行之后才能从数据库中提取。

显而易见的解决方案是在此查询之前创建一个单独的查询,以便提取$ IDParent的值。但是,我怀疑可能有某种方法来修改我现有的查询来完成同样的事情。有什么建议吗?

P.S。存储在字段IDParent中的一些值包括usa,can(加拿大),na(北美),sa(南美),eur(欧亚大陆),afr(非洲),jpn(日本); pac,atl,ino(太平洋,大西洋和印度洋)和reg(地区)。

CREATE TABLE gw_geog(  N mediumint(3)NOT NULL AUTO_INCREMENT,  IDArea varchar(7)COLLATE latin1_general_ci NOT NULL DEFAULT'',  ISO2 varchar(6)COLLATE latin1_general_ci DEFAULT NULL,  ISON int(3)DEFAULT NULL,  FIPS char(2)COLLATE latin1_general_ci DEFAULT NULL,  Name varchar(44)COLLATE latin1_general_ci NOT NULL DEFAULT'',  NameAlph varchar(44)COLLATE latin1_general_ci NOT NULL DEFAULT'',  Type char(3)COLLATE latin1_general_ci NOT NULL DEFAULT'',  IDParent char(4)COLLATE latin1_general_ci DEFAULT NULL,  Parent varchar(22)COLLATE latin1_general_ci DEFAULT NULL,  IDParent2 char(4)COLLATE latin1_general_ci DEFAULT NULL,  Parent2 varchar(22)COLLATE latin1_general_ci DEFAULT NULL,  IDReg varchar(7)COLLATE latin1_general_ci DEFAULT NULL,  Pre varchar(44)COLLATE latin1_general_ci DEFAULT NULL,  Post varchar(44)COLLATE latin1_general_ci DEFAULT NULL,  CIA tinyint(1)DEFAULT NULL,  G1 tinyint(1)NOT NULL DEFAULT'1',  PRIMARY KEY(N),  KEY ParentParent),  KEY IDRegIDReg),  KEY IDAreaIDArea),  KEY IDParentIDParent),  KEY NameName) )ENGINE = MyISAM AUTO_INCREMENT = 549 DEFAULT CHARSET = latin1 COLLATE = latin1_general_ci

0 个答案:

没有答案