我有两张桌子。第一个包含名字,第二个包含姓氏。 (我可以用一张带有两个柱子的桌子来做,但我出于其他原因使用这种方式)
我想做出所有可能的组合。
所以,如果有名字: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/>";
}
}
有了这个我得到了:
姓名表中的名字
与名字和所有姓氏(姓氏)的组合
所有其他人的姓名
我没有得到所有名字和姓氏的所有组合。
我做错了什么?
提前谢谢你 (抱歉我的英语不好)
答案 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/>";
}
}