[英]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 ;
id 1
topid 0
name 'vehicle'
--------------
id 2
topid 1
name 'bike'
--------------
id 3
topid 1
name 'truck'
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 = 4
或topid = 4
,但您显示的样本数据仅具有id = 1
或topid = 1
。 您实际上在系统中是否有id = 4
或topid = 4
的数据?
在这两个混乱之间,很难知道我们面临的是什么。 如果您有联接的数据并具有相关的topid
或id
值,则您的查询应该可以使用。
我在两个表中都有一个名为'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.