从两个不同的foreach循环中删除重复的数据

时间:2019-02-18 14:37:57

标签: php loops duplicates

每个循环我有两个。每个人都在不同的表上运行

$nores_std="SELECT std_id,std_name FROM student WHERE std_class = '$cl' ";
$nores_q = mysqli_query($link,$nores_std);
foreach ($nores_q as $name_std){
echo $name_std['std_id']; echo '<br>';
}
echo '<br>';
$no_select = "SELECT std_id,std_name FROM selection WHERE std_class = '$cl' ";
$no_select_q = mysqli_query($link,$no_select);
foreach ( $no_select_q as $std_sel){
    echo $std_sel['std_id'];
    echo '<br>';
}

第一个结果是:

**554553**
**554557**
554561
**554566**
554573
**554577**
554581
554582
554587
**554590**
554591
554593
554596
554597
554599
554602
554603
554604
554607
554619
554620
554632
554637
554640
554643
554648
**554549**

第二个结果是:

554566
554577
554549
554590
554553
554557

我想检查重复项并删除重复值,仅显示未重复的值

2 个答案:

答案 0 :(得分:1)

PHP解决方案通过array-diff

$nores_std="SELECT std_id,std_name FROM student WHERE std_class = '$cl' ";
$nores_q = mysqli_query($link,$nores_std);
foreach ($nores_q as $name_std){
    $a[] = $name_std['std_id'];
}

$no_select = "SELECT std_id,std_name FROM selection WHERE std_class = '$cl' ";
$no_select_q = mysqli_query($link,$no_select);
foreach ( $no_select_q as $std_sel){
    $b[] = $std_sel['std_id'];
}

$res = array_diff($a, $b);

注意您可以使用array-column来避免foreach循环

我会重新检查数据方案-您可能希望以其他方式获取数据

答案 1 :(得分:0)

最有效的方法是在单个查询中从两个表中选择一个:

SELECT DISINCT std_id, std_name FROM
(
        SELECT std_id, std_name FROM student   WHERE std_class = '$cl'
  UNION SELECT std_id, std_name FROM selection WHERE std_class = '$cl'
) t