2013-04-25 85 views
0

我是mysql数据库的新手,我试图创建一个使用连接的查询。 我已经写了,走的时间来执行1秒,当前查询,我已经做了reasearch,发现加入成为减少执行的时间最好的解决办法,转换mysql子查询加入

我在用的查询是:

SELECT count(1) as total 
FROM `mytable` 
where pid IN (
    SELECT pid FROM `maps` 
    where `node_id` = (
      SELECT nid FROM shop 
      WHERE value = 'selling' 
      and parent = '170' 
      and tid = 1 
     ) 
    and tid = 1 
) 
and `pnumber` IN (
    select pnumber 
    FROM users_pro 
    where value = 'hulo' 
    and tid = 1 
) 
and tid = 1 

请大家不要多多帮助。

谢谢..

+1

嗯,'限1'没有'ORDER BY' ......对我来说,这意味着 '一个随机记录',你有你'nid'其他要求? – Wrikken 2013-04-25 20:08:27

+0

@Wrikken对于nid – Afsar 2013-04-25 20:11:09

+0

,请仅说明一点:如果内部查询中有两个或更多不同的'nid'满足要求,该怎么办? – Wrikken 2013-04-25 20:13:18

回答

1
SELECT count(distinct mytable.*) as total 
FROM mytable 
JOIN maps 
    ON mytable.pid = maps.pid 
    AND maps.tid = mytable.tid 
JOIN shop 
    ON maps.node_id = shop.nid 
    AND shop.value = 'selling' 
    AND shop.parent = '170' 
    AND shop.tid = mytable.tid 
JOIN users_pro 
    ON mytable.pnumber = users_pro.pnumber 
    AND users_pro.value = 'hulo' 
    AND users_pro.tid = mytable.tid 
WHERE mytable.tid=1 
+0

谢谢你的完美作品。 – Afsar 2013-04-26 14:57:05