【问题标题】:SQLite / Javascript: How to know when all values in column A are identicalSQLite / Javascript:如何知道A列中的所有值何时相同
【发布时间】:2012-04-28 08:35:35
【问题描述】:

作为对数千行的深入文本搜索的一部分,其中许多行在 A 列中包含相同的数据,我想知道 A 列的 sqlite 结果集中的所有行何时都相同。例如。如果搜索词是 'ai' 并且列 A = 'in pain' 的结果集中的所有行都执行此函数。

那么我如何以编程方式,在 sqlite 中或在结果集上使用 javascript 询问:A 列中的所有行是否相同?

这可能很简单(希望如此),但今天我不会来...

谢谢!

【问题讨论】:

    标签: javascript mysql sqlite


    【解决方案1】:
    SELECT columnA, count(*) 
    FROM  MyTable 
    WHERE myField like '%AI%'  
    GROUP BY columnA
    

    可能不会是最快的,因为它在两边都做了 %... 这是SQLLite article

    您可以在字段上使用正则表达式搜索 AI,这可能会更快

    已更新,但我仍然认为我不完全理解问题示例数据会有所帮助.. 所以

    专栏 在疼痛 在疼痛 在巢穴中 在巢穴里

    你想看吗

    in pain      2
    in the lair  2
    

    或者你想看 no records found(因为A列中包含ai的所有值都不匹配?)

    ---也许这就是你所追求的......

    select count(*) mcount from (
        SELECT columnA, count(*) 
        FROM  MyTable 
        WHERE columnA like '%AI%'  
        GROUP BY columnA) innerResult
    

    如果 mcount > 1,则 columnA 有超过 1 个匹配 '%AI%' 的值

    【讨论】:

    • 这会选择匹配 %ai% 的行,但它并没有告诉我 A 列中的所有行是否都相同 'in pain' 也许那里有一行 'in the lair '。我需要知道 A 列中的所有行何时都包含相同的内容。
    • @K'shin 更新了回复,但如果您想查看所有 AI 及其计数,或者没有找到记录或.. 什么?
    • 我预计会有多行包含“ai”,问题是所有这些行在 A 列中是否具有相同的值?对于这个问题,对或错就足够了,但是要查看每个不同行有多少记录对其他事情来说很方便;-)
    • 那么我认为我的第二个查询可以满足这两个需求。外部查询是 true/false esque,如果它 > 1 它是 false = 1 True = 0 然后什么都没有 = AI。内部选择回答了其他事情的方便..
    • 感谢 xQbert。这是一个非常酷的查询,它确实告诉我与该术语匹配的列中的行,不幸的是,它在数据库上运行并创建它自己的结果集。除了我们向用户展示的结果集之外,在吐出结果集之前还有很多其他的事情要检查。根据上面的原始问题,我希望能够运行一些代码来检查现有的 SQLite 结果集,以查看 A 列中的所有行(在结果集中,而不是在 db 中)是否相同。我怀疑这必须在 javascript 中完成。
    【解决方案2】:

    这在 SQL 中会很昂贵:

     SELECT ColumnA, (SELECT COUNT(*) FROM YourTable WHERE ColumnA LIKE '%ai%' AND ColumnA <> outer.ColumnA) AS OtherCount
       FROM YourTable AS outer WHERE ColumnA LIKE '%ai%';
    

    在 javascript 中,您只需遍历维护 A 列值字典的行,当字典中有两个键时,您就知道并非所有结果都相同。

    【讨论】:

    • 谢谢拉里,你能不能显示 javascript 来检查字典(字典 = 字典 + 新行;)是否也有 >= 2 个键?
    【解决方案3】:

    在db调用成功函数中使用Javascript:

    var detailsarr=[];
    if (results.rows && results.rows.length) {
    for (var i = 0; i < results.rows.length; i++) {
    var details=results.rows.item(i).details;
    if(detailsarr.toString().indexOf(details)===-1){detailsarr.push('"'+details+'"');}
        }
    detailsarr = '['+detailsarr+']';
    var detailsdata=JSON.parse(detailsarr);
    if(detailsdata[1]){THEN ALL ROWS ARE NOT IDENTICAL}
    }
    

    【讨论】:

      猜你喜欢
      • 2010-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-17
      • 2021-05-26
      • 2023-03-14
      • 2011-09-07
      相关资源
      最近更新 更多