隐藏表B中显示的表A中的行

时间:2015-10-30 14:54:04

标签: javascript java jquery html

我有桌子(员工)A:

+----+---------+
| ID | NAME    |
+----+---------+
| 1  | ROBERT  |
| 2  | JAMES   |
| 3  | RICHARD |
| 4  | KANYE   |
| 5  | DYLAN   |
| 6  | JOHN    |
| 7  | JEAN    |
| 8  | LOKI    |
| 9  | ADAM    |
+----+---------+

和表(员工)B:

+----+---------+
| ID | NAME    |
+----+---------+
| 1  | ROBERT  |
| 2  | JAMES   |
| 3  | RICHARD |
| 4  | KANYE   |
| 5  | DYLAN   |
+----+---------+

那些人是我的“雇员”。表B中的名称是我数据库中的所有员工,表A中的名称是我分配给项目1的所有员工。

我想隐藏已在表A中出现的表B中的所有名称,因为我不想将同一名员工重新分配到项目n°1。

如何使用jQuery解决此问题?

3 个答案:

答案 0 :(得分:0)

客户端检查将是:

function compareLists(listA, listB){
 var resultList = [];
   listA.forEach(function(itemA){
     listB.forEach(function(itemB){
        if (itemB.name !== itemA.name)resultList.push(itemB);
     }
   }
 return resultList;  
}

或在服务器端(数据库):

select * from table_b where name not in (select name from table_a)

问候

答案 1 :(得分:0)

通常你应该使用SQL在服务器端执行此操作,如已经回答的那样。但是,既然你问了javascript。这是在客户端过滤它的方法:

//collect list of names in A
var table = document.getElementById("TableA");
var names = []
for (var i = 0, row; row = table.rows[i]; i++) {
    names.push(row.celss[1]);
}
//check names in B
table = document.getElementById("TableB");
for (var i = 0, row; row = table.rows[i]; i++) {
    if(jQuery.inArray(row.cells[1], names) !== -1){
        //show row
    }else{
        //hide row
    }
}

答案 2 :(得分:0)

我在Jquery中没有那么多知识..

但是这个查询可以提高大型数据库的性能。

SELECT
    FROM TableB
    LEFT JOIN TableA ON TableB.name=TableA.name   // id will be better than name
    WHERE TableB.name IS NULL

希望这有帮助