如何从单个列中的所有行获取数据?

时间:2016-03-16 17:40:47

标签: php mysqli

我是一个PHP菜鸟,我很难搞清楚看起来应该很简单的东西。我的主要目标是在列#34;数字"中找到所有数字。然后列出数字01-20,只要他们不在数据库中显示。

这是我到目前为止所做的:

$select = mysqli_query($connect, "SELECT * FROM `memfav`");
while($row=mysqli_fetch_assoc($select)) {
    $number = $row['number'];
}
for($i=1; $i<=20; $i++) {
    if($i<>$number) {
        if($i<10) {
            echo "<option value=\"$i\">0$i</option>";   
        }
        else{
            echo "<option value=\"$i\">$i</option>";
        }

    }
}

然而,它只是没有显示最新的条目。我完全错过了什么吗?

ETA:对于任何寻找类似内容的人,我终于找到了实现这一目标的方法! (在其他人的帮助下)

$select = mysqli_query($connect, "SELECT `number` FROM `memfav`");
while( $row = mysqli_fetch_assoc($select) ) {
$numbers[] = $row['number'];
}
for($i=1; $i<=20; $i++) {
if( !in_array($i, $numbers) ) {
    echo '<option value="$i">' . str_pad($i, 2, '0', STR_PAD_LEFT) . '</option>';
}
}

3 个答案:

答案 0 :(得分:2)

您已将比较逻辑放在while循环之外;如上所述,您的代码循环遍历您的mysql结果,并将$number设置为每行的新值。此循环完成,使$number等于返回的最后一行的值。然后它会根据值1-20检查$number的最终值。要解决此问题,请将比较逻辑放在while循环中。

答案 1 :(得分:0)

试试这个:

$numbers = array();
for ($i = 1; $i <= 20; $i++) {
    if ($i < 10) {
        $numbers[] = "0{$i}";
    } else {
        $numbers[] = "{$i}";
    }
}

$select = mysqli_query($connect, "SELECT * FROM memfav");
$usedNumbers = array();
while ($row = mysqli_fetch_assoc($select)) {
    $usedNumbers[] = $row['number'];
}

$diff = array_diff($numbers, $usedNumbers);

foreach ($diff  as $key => $value) {
     echo "<option value=\"{$value}\">{$value}</option>";   
}

答案 2 :(得分:-1)

$select = mysqli_query($connect, "SELECT * FROM `memfav`");
while($row=mysqli_fetch_assoc($select)) {
    $number = $row['number'];
    for($i=1; $i<=20; $i++) {
      if($i<>$number) {
        if($i<10) {
            echo "<option value=\"$i\">0$i</option>";   
        }
        else{
            echo "<option value=\"$i\">$i</option>";
        }

      }
    }
}