SELECT p.id,p.playname,p.wanfa,t.id AS tzid,t.zhid,t.idchar,t.czlx,t.wanfa,t.qihao,t.money,t.zjmoney,t.jjz,t.beishu,t.ms,t.`addtime`,t.zt AS tzzt,qh.qihao,qh.kjhm,qh.czlx,u.uid,u.username,t.uid
FROM tz AS t 
Inner Join playgroup AS p ON t.wanfa = p.wanfa 
Inner Join qihaoinfo as qh ON t.qihao = qh.qihao AND t.czlx = qh.czlx 
Inner Join username as u ON t.uid = u.uid and u.uid = '32' and 
(t.addtime >='1322064000' and t.addtime <= '1322150399')
GROUP BY t.id
order by t.id desc
limit 0,20这段SQL还能否再进行优化?
还有一个就是t.zhid,有时候会有相同的zhid值.我想只显示一条.其它的放到点击后的页面里显示.
这个如何做呢.
我加了一个 DISTINCT(t.zhid),在上面,好象不管用..
还望高手指点一下.

解决方案 »

  1.   

    这段SQL还能否再进行优化?
    有没用上索引。EXPLAIN 分析一下。
    还有一个就是t.zhid,有时候会有相同的zhid值.我想只显示一条.其它的放到点击后的页面里显示.
    这个如何做呢.
    GROUP BY t.id,t.zhid
    我加了一个 DISTINCT(t.zhid),在上面,好象不管用..
    DISTINCT要记录都雷同才排除
    如果相同id数据量大的话,感觉你先分组后再内联其它表。会好些。
      

  2.   

    你可能没有明白我意思..
    1.有索引的.
    2.还有一个就是t.zhid,有时候会有相同的zhid值.我想只显示一条.其它的放到点击后的页面里显示.
    这个如何做呢.
    看下面的例子.----|----------|---
    ID  |   zhid   |
    ----|----------|---
     1     zh-111  
     2     zh-111 
     3     zh-111 
     4     zh-111 
     5     zh-111 
     6     null 
     7     null
     8     null注:null表示为空.
    这个前五条的记录的zhid不是一样的吗?我现在只想让他在列表里显示第一条.其它四条不显示.
    是这个意思
      

  3.   

    先排好序再套一下啊。然后分组。就以第一条分组了。select * FROM (你的sql)  GROUP BY zhid
      

  4.   

    1、你的SQL语句不是标准的;
    2、将你的查询存为VIEW,假设ID唯一
    select * from view1 a where not exists(select 1 from view1 where a.zhid=zhid and a.id>id)
      

  5.   

    先贴出你的
    explain select ...
    show index from ...的结果以供分析。