SELECT a1.FileID AS FileID, SUM( a1.Count + a2.Count + a3.Count + a4.Count ) AS Count
FROM gmpTableWordList AS a1
INNER JOIN gmpTableWordList AS a2
INNER JOIN gmpTableWordList AS a3
INNER JOIN gmpTableWordList AS a4 ON a1.FileID = a2.FileID
AND a2.FileID = a3.FileID
AND a3.FileID = a4.FileID
AND a1.Word = "Tempest"
AND a2.Word = "EMC"
AND a3.Word = "shielding"
AND a4.Word = "glass"
GROUP BY FileID
ORDER BY Count DESC 
LIMIT 0 , 30这在MYSQL下能顺利执行,但在SQLite下不行,搜索了一下相关文档,应该是sqlite不支持这种查询方式。请高手帮帮忙,把以上代码转成sqlite能执行的语句,其中a1,a2,a3.....的多少是跟据Word的多少来决定的,目前只是Tempest,EMC,shielding,glass.谢谢了!在线等.

解决方案 »

  1.   

    应该支持啊。你的表 gmpTableWordList 的建表语句是什么?贴出来大家可以测试一下。
      

  2.   

    建表语句是这个:
    CREATE TABLE gmpTableWordList (Word varchar(50) NOT NULL, FileID int(10) NOT NULL, Count INTEGER UNSIGNED)") or die("创建表失败!");
      

  3.   

    提示什么信息?SQLIT3支持LIMIT
      

  4.   

    sqlite版本应该是2.8的。我在sqlitemanager中运行的,提示是:
    Error 1 : SQL logic error or missing database
      ambiguous column name: Count
      

  5.   

    当时怀疑过Count是sqlite的保留字,但其它查询也是这样查的,没问题呢。就这句有问题。
      

  6.   

    你的语句SQLite 中测试没有任何问题。sqlite> CREATE TABLE gmpTableWordList (Word varchar(50) NOT NULL, FileID int(10) NOT NULL, Count INTEGER UNSIGNED);
    sqlite> SELECT a1.FileID AS FileID, SUM( a1.Count + a2.Count + a3.Count + a4.Count ) AS Count
       ...> FROM gmpTableWordList AS a1
       ...> INNER JOIN gmpTableWordList AS a2
       ...> INNER JOIN gmpTableWordList AS a3
       ...> INNER JOIN gmpTableWordList AS a4 ON a1.FileID = a2.FileID
       ...> AND a2.FileID = a3.FileID
       ...> AND a3.FileID = a4.FileID
       ...> AND a1.Word = "Tempest"
       ...> AND a2.Word = "EMC"
       ...> AND a3.Word = "shielding"
       ...> AND a4.Word = "glass"
       ...> GROUP BY FileID
       ...> ORDER BY Count DESC
       ...> LIMIT 0 , 30;
    sqlite>
      

  7.   

    你的SQLite是什么版本啊,我的是用PHP创建的,应该是2.8的版本吧。
      

  8.   

    SELECT a1.FileID AS FileID, SUM( a1.Count + a2.Count + a3.Count + a4.Count ) AS Count
    FROM gmpTableWordList AS a1
    INNER JOIN gmpTableWordList AS a2
    INNER JOIN gmpTableWordList AS a3
    INNER JOIN gmpTableWordList AS a4 ON a1.FileID = a2.FileID
    AND a2.FileID = a3.FileID
    AND a3.FileID = a4.FileID
    AND a1.Word = "Tempest"
    AND a2.Word = "EMC"
    AND a3.Word = "shielding"
    AND a4.Word = "glass"
    GROUP BY FileID &&什么表的字段
    ORDER BY Count DESC  &&修改为2
    LIMIT 0 , 30
      

  9.   

    改成这个
    SELECT a1.FileID AS FileID, SUM( a1.Count + a2.Count + a3.Count + a4.Count ) AS Count
    FROM gmpTableWordList AS a1
    INNER JOIN gmpTableWordList AS a2
    INNER JOIN gmpTableWordList AS a3
    INNER JOIN gmpTableWordList AS a4 ON a1.FileID = a2.FileID
    AND a2.FileID = a3.FileID
    AND a3.FileID = a4.FileID
    AND a1.Word = "Tempest"
    AND a2.Word = "EMC"
    AND a3.Word = "shielding"
    AND a4.Word = "glass"
    GROUP BY a1.FileID
    ORDER BY 2 DESC
    LIMIT 0 , 30;
      

  10.   

    最终找到了问题的原因:sqlite和mysql在对待大小写上有区别。我把搜索关键字用strtolower转一下,结果就完全正常了!