返回不同表中两个MySQL列之间的差异

时间:2014-03-22 01:20:42

标签: php mysql

我尝试将tableOne中的姓名与tableTwo中的姓名进行比较。下面的代码可以做到这一点,但它只比较相应行中的名称。我想扫描tableTwo以查看它们是否与tableOne中的名称相匹配,如果有,则为tableOne中的名称添加一个警示。

$result = mysqli_query($con,"SELECT * FROM tableOne LIMIT 0, 8");
$result2 = mysqli_query($con,"SELECT * FROM tableTwo");

$i = 1;

while($row = mysqli_fetch_array($result)) {
    $value1 = $row['names'];
    $row2 = mysqli_fetch_array($result2);
    $value2 = $row2['names'];
    echo $i . " - "; 

    if ($value2 != $value1) {
        echo '<span class="strike">' . $value1 . '</span>';

    } else {
        echo $value2;
             $points = 7;
        echo '<span class="champ">' . '+' . $points . "</span>";
    }
    echo '<br>';
    $i++;
}

我问了一个类似的问题here,但没有完全做我需要的。我相信我需要做一个嵌套循环,但我不确定如何实现它。

2 个答案:

答案 0 :(得分:2)

最好的办法是编写一个更复杂的查询,只循环一次。

下面的查询将“名称”列匹配的tableOne和tableTwo行连接在一起。如果它们不匹配,那么tableOne列将存在,但tableTwo列将全部为空。

$sQuery = "SELECT tableOne.*, tableTwo.names as t2names 
FROM tableOne LEFT JOIN tableTwo USING (names) LIMIT 0, 8";

$result = mysqli_query($con,$sQuery);

$i = 1;

while($row = mysqli_fetch_array($result)) {
    $value1 = $row['names'];
    echo $i . " - "; 

    if ($row['t2names']) {
        echo '<span class="strike">' . $value1 . '</span>';

    } else {
        echo $value1;
        $points = 7;
        echo '<span class="champ">' . '+' . $points . "</span>";
    }
    echo '<br>';
    $i++;
}

我很少使用mysql,因此查询可能无法正常工作

答案 1 :(得分:0)

在第二次阅读您的问题后,我相信array_intersect是您更好的选择。

$result = mysqli_query($con, "SELECT * FROM tableOne LIMIT 0, 8");
$result2 = mysqli_query($con, "SELECT * FROM tableTwo");



    while ($row = mysqli_fetch_array($result)) {
        $array1[] = $row['names'];

    }
    mysqli_free_result($result);

    while ($row = mysqli_fetch_array($result2)) {
        $array2[] = $row['names'];

    }
    mysqli_free_result($result2);

    $intersect = array_intersect($array1, $array2);

当我自己使用PDO时,你基本上得到了独立的数组,然后将它们相交。

php:array_intersect

当您的阵列拉直时,您可以添加罢工。