繁体   English   中英

协助MySQL JOIN

[英]Assistance with MySQL JOIN

我有两个表,一个有类别和子类别。 每个类别和子类别都有一个id,如果它是一个子类别,它有一个topid != 0引用它的子类别。 其他表“markers”有一个字段'cat',它与类别字段'name'相关联现在我想从带有category.id = 4 OR category.topid = 4标记中选择所有内容,所以我尝试了这个查询:

SELECT * FROM `xymply_markers`
JOIN `xymply_categories`
    ON xymply_markers.cat = xymply_categories.name
WHERE xymply_categories.topid=4
    OR xymply_categories.id=4

即使我在表格“标记”中有这样的元素,这也不会给我任何回报。 任何援助将不胜感激!

表模式:

`xymply_categories` (
  `id` int(11) NOT NULL auto_increment,
  `topid` int(11) NOT NULL,
  `name` text NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=15 DEFAULT CHARSET=utf8 AUTO_INCREMENT=15 ;

`xymply_markers` (
  `created` date NOT NULL,
  `id` int(11) NOT NULL auto_increment,
  `sdate` date NOT NULL,
  `hdate` date NOT NULL,
  `name` varchar(60) NOT NULL,
  `address` varchar(80) NOT NULL,
  `unit` varchar(6) NOT NULL,
  `lat` decimal(10,7) NOT NULL,
  `lng` decimal(10,7) NOT NULL,
  `type` varchar(30) NOT NULL,
  `userid` int(11) NOT NULL,
  `adtext` text NOT NULL,
  `phone` varchar(20) NOT NULL,
  `email` varchar(30) NOT NULL,
  `url` varchar(30) NOT NULL,
  `cat` varchar(4) NOT NULL,
  UNIQUE KEY `id` (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=151 DEFAULT CHARSET=utf8 AUTO_INCREMENT=151 ;

样本数据:

xymply_categories:

id  1
topid 0
name 'vehicle'
--------------
id  2
topid 1
name 'bike'
--------------
id  3
topid 1
name 'truck'

xymply_markers:

id 1
sdate 2012-03-01
hdate 2012-04-01
name 'TEST'
address '1234 TEST'
unit''
lat 49.0
lng -123.0
adtext 'TEST'
phone '1234567890'
email 'email@email.com'
url 'www.url.com'
cat 'bike'

--------------

id 1
sdate 2012-03-01
hdate 2012-04-01
name 'TEST'
address '1234 TEST'
unit''
lat 49.5
lng -123.5
adtext 'TEST'
phone '1234567890'
email 'email@email.com'
url 'www.url.com'
cat 'vehicle'

一个问题是xymply_markers.cat字段是VARCHAR(4)但xymply_categories.name字段是TEXT,并且包含长度超过4个字符的值。 您要么没有给我们准确的架构,要么您对哪些列加入感到困惑,或者您永远不会看到任何卡车或车辆。 连接的列应该具有相同的类型,几乎没有例外(我从未见过一个例外的好理由)。

然后,您询问的是id = 4topid = 4 ,但您显示的样本数据仅具有id = 1topid = 1 您实际上在系统中是否有id = 4topid = 4的数据?

在这两个混乱之间,很难知道我们面临的是什么。 如果您有联接的数据并具有相关的topidid值,则您的查询应该可以使用。


我在两个表中都有一个名为'id'的字段。 在使用$row = @mysql_fetch_assoc($result)数据读入数组后,如何控制使用PHP访问哪一个?

最简单的方法是确保每个结果列都有一个唯一的名称,创建一个带有“别名”的名称,如下所示:

SELECT c.id AS category_id,
       c.topid,
       c.name AS category_name,
       m.id AS marker_id,
       m.name AS marker_name,
       ...

PHP会将别名与行中的数据相关联。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM