【问题标题】:PHP - Removing row based on values in column postgresqlPHP - 根据列 postgresql 中的值删除行
【发布时间】:2018-11-04 15:58:55
【问题描述】:

我正在使用 PHP 在 postgresql 中生成一个表。

结果表

除了第一列之外,有很多行具有相同的值,这是唯一的 ID。当我尝试根据gene_id、searchterm 和type 中的相似值进行删除时。

因此,我使用了以下代码:

$sql = "SELECT DISTINCT gene_id FROM searchterms";

或者

$sql = "SELECT DISTINCT ON (gene_id,searchterm,types) * FROM searchterms";

执行此代码后,我仍然得到相同的结果。我想只保留 id 为 4 的行。

【问题讨论】:

    标签: php postgresql select distinct


    【解决方案1】:

    您要删除所有空行吗?

    DELETE FROM searchterms WHERE gene_id = 0
    

    对于具有重复项的非空行,您将需要选择多个行:

    SELECT gene_d, COUNT(*) c FROM table GROUP BY name HAVING c > 1;
    

    然后您可以从数组中弹出一个元素,然后删除其他 id。

    首先要停止添加重复项,只需先执行SELECT 查询,如果未找到任何行,请执行INSERT

    【讨论】:

    • 是的,但是我也想考虑一下gene_id的值是否相同,而不是0。我还没有得到这些结果,但也许当我消耗表格时,可能会出现这样的例子.
    【解决方案2】:
    Select * from searchterms WHERE gene_id <> 0 AND searchterm <> 0 AND types <> 0 group by gene_id,searchterm,types
    

    【讨论】:

    • 谢谢大家,你给我一些想法。
    【解决方案3】:

    您应该首先阻止它们插入。

    例如

    if(geneid == 0){
         break;
    }else{
         # insert query}
    

    【讨论】:

      【解决方案4】:

      我认为 distinct 在这种情况下不起作用。因为如果您给出 distinct 它仍然会显示 2 条记录,即gene_id = 0 和gene_id = 1253246。

      因此,为了避免那些其他记录,您可能需要检查诸如gene_id 0 或gene_id > 0 之类的条件

      【讨论】:

        猜你喜欢
        • 2019-07-06
        • 2015-11-14
        • 1970-01-01
        • 1970-01-01
        • 2019-02-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多