2009-12-03 84 views
0

我有一个表,打了个比方,“节点”,从中我需要返回值,如下所示:Mysql的多个表中选择

SELECT nid FROM node WHERE type = "book" 

后,我得到的值的列表让我们说:

|**nid**| 
|123| 
|12451| 
|562| 
|536| 

然后我需要采取这些值,并检查另一个表中,行,其中列“路径”具有值“节点/ 123”,“节点/ 12451”(数字先前的请求返回)在一个加入请求。如果collumn'path'有简单的数字,没有'node /',这一切都会更容易。 然后还计算返回的相同数量即'节点/ 123'。 最终的结果会是这样的:如果在多个分离的查询做

nid | path | count(path) | count(distinct path) 
123 |node/123| 412  |  123   
562 |node/562| 123  |  56 

工作正常,但不会做。

+0

对于给定的nid /路径对,如何计数(不同路径)与1不同? – Romain 2009-12-03 14:26:15

回答

1
select a.nid from node a join othertable b 
on b.path = concat("node/", a.nid) where type='book' 
0

你或许可以这样做以下(nid可能需要额外的转换成某种字符串类型):

SELECT * 
FROM OtherTable 
JOIN node ON path = CONCAT('node/', nid) 
WHERE type = 'book' 
0

感谢大家的帮助。基本上,问题是我不知道如何获得nidnode/在一起,但concat帮助。 最终结果如下所示:

SELECT node.nid, accesslog.path, count(accesslog.hostname), count(distinct accesslog.hostname) 
    FROM `node`, `accesslog` 
    WHERE node.uid=1 
    AND node.type='raamat' 
    AND accesslog.path = CONCAT('node/', node.nid) 
GROUP BY node.nid