我有两个表,一个有类别和子类别。每个类别和子类别都有一个id,如果它是一个子类别,它有一个topid != 0
引用它的子类别。其他表“标记”有一个字段'cat',它与类别字段'name'相关联现在我想从带有category.id = 4
或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'
答案 0 :(得分:3)
一个问题是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会将别名与行中的数据相关联。