在while循环

时间:2017-02-12 20:26:14

标签: php mysqli while-loop

我有两张桌子。第一个包含名字,第二个包含姓氏。 (我可以用一张带有两个柱子的桌子来做,但我出于其他原因使用这种方式)

我想做出所有可能的组合。

所以,如果有名字:John,Zed,Marko和姓:Abbot,Zang我希望输出如下: JohnAbbot JohnZagn ZedAbbot ZedZang MarkoAbbot MarkoZang

我用For循环和alfanumeric标志做了类似的事情。我能够使用6个嵌套for循环来完成它,但是我无法在while循环中使用它。

这是我使用的代码:

$query_name = "SELECT name FROM names";
$results=mysqli_query($connect, $query_name);
$query_surname = "SELECT surname FROM surnames";
$results2=mysqli_query($connect, $query_surname);

while ($row = mysqli_fetch_assoc($results)) {
    while ($row2 = mysqli_fetch_assoc($results2)) {
        echo $row['name'].$row2['surname']."<br/>";
    }
}

有了这个,我只得到了一个名字和所有姓氏的组合。

之后我在第一个while循环中添加了一个echo,如下所示:

while ($row = mysqli_fetch_assoc($results)) {
    echo $row['name']."<br/>";

    while ($row2 = mysqli_fetch_assoc($results2)) {
        echo $row['name'].$row2['surname']."<br/>";
    }
}

有了这个我得到了:
姓名表中的名字
与名字和所有姓氏(姓氏)的组合
所有其他人的姓名

我没有得到所有名字和姓氏的所有组合。

我做错了什么?

提前谢谢你 (抱歉我的英语不好)

2 个答案:

答案 0 :(得分:1)

您可以使用简单的查询

select a.name, b.surname
from  names as a
FULL JOIN surnames as b

答案 1 :(得分:1)

那是因为每个句柄只进行一次抓取,所以当你的内循环到达记录的末尾时,它永远不会回到第一个 - 就像你需要的那样 - 但是留在最后并返回false。

如果你的结果集不是百万行,那么尝试只获取一次,然后组合数组和foreach-loops,每次从一开始就顺从地开始:

$a1 = array();while ($row = mysqli_fetch_assoc($results)) $a1[]=$row;
$a2 = array();while ($row = mysqli_fetch_assoc($results)) $a2[]=$row;

foreach($a1 as $row1) {
    foreach($a2 as $row2) {
        echo $row1['name'].$row2['surname']."<br/>";
    }
}