三个表,表host,表record,表comm
SQL语句如下:vSELECT  `url_host` . * , (SELECT COUNT( * ) 
FROM  `url_record` 
WHERE  `tn` =  '10'
) AS  `enter` , (SELECT COUNT( * ) 
FROM  `url_record` 
WHERE  `tn` =  '11'
) AS  `hit` , (SELECT COUNT( * ) 
FROM  `url_record` 
WHERE  `tn` =  '21'
) AS  `ding` , (SELECT COUNT( * ) 
FROM  `url_comm`
) AS  `comm` 
FROM  `url_host` 
LEFT JOIN  `url_comm` ON  `url_host`.`id` =  `url_comm`.`sid` 
LEFT JOIN  `url_record` ON  `url_record`.`sid` =  `url_host`.`id` 
WHERE 1 =1
AND  `url_host`.`hl` =  ''
AND  `url_host`.`ct` =  ''
AND  `url_host`.`tp` =  ''
AND  `url_host`.`fs` =  ''
GROUP BY  `url_host`.`id` 
ORDER BY  `enter` +  `hit` +  `ding` DESC 
LIMIT 0 , 15
=============================================================================
当去掉那【where 1=1】背后一群and 之后就会有结果的,如果没有那一群and 就不会有结果的。怎么弄啊?
那一群and 有可能是没有设置,也有可能是设置了。所以用了这个where 1=1。怎么样做啊?我的问题出在了哪里啊?

解决方案 »

  1.   

    当去掉那【where 1=1】背后一群and 之后就会有结果的,如果没有那一群and 就不会有结果的。 这段汉语理解起来比较吃力。到底是有还是没有? 
    建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
      

  2.   

    不好意思,写错了。
    是:当去掉那【where 1=1】背后一群and 之后就会有结果的,如果有那一群and 就不会有结果的。 是有了那一群and 就不会出现结果的。
    没有那一群and 就是正常显示的。
      

  3.   

    试一下这个语句,你的表中有这样的记录吗?这几个字段全为“” (空字符串)
    select * from url_host
    where `hl` =  ''
    AND  `ct` =  ''
    AND  `tp` =  ''
    AND  `fs` =  ''
      

  4.   

    没有啊。
    如果hl=''的时候要显示是【hl=任意】,所有的,那么怎么写啊?
      

  5.   


    建议你看一下有关SQL的基础知识。改成 hl like '%'
      

  6.   

    终于有了。
    但是不过当我用hl='%'的时候却也是没有的。用hl LIKE '%'的时候才有结果。
    hl 是varchar类型。
      

  7.   

    like 和 = 是完全不同的两个运算符。建议看一下手册。MySQL官方文档 http://dev.mysql.com/doc/refman/5.1/zh/index.html