Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP while语句重复出现_Php_While Loop_Duplicates_Echo - Fatal编程技术网

PHP while语句重复出现

PHP while语句重复出现,php,while-loop,duplicates,echo,Php,While Loop,Duplicates,Echo,我是PHP新手,我花了几个小时研究并试图找出我做错了什么。我将连接多个表,用一个事务表中的多个事务填充一个客户机配置文件页面。页面的其余部分正在按预期处理查询,但当使用while语句时,结果中的每个事务重复的次数等于结果中的事务总数。例如,如果结果有3个事务编号(1、2、3),则while语句会回显“1、1、1、2、2、3、3、3”,而不仅仅是“1、2、3” 我知道这很简单,但它让我毛骨悚然。请帮助: if(!isset($_GET['PeopleID'])){ header

我是PHP新手,我花了几个小时研究并试图找出我做错了什么。我将连接多个表,用一个事务表中的多个事务填充一个客户机配置文件页面。页面的其余部分正在按预期处理查询,但当使用while语句时,结果中的每个事务重复的次数等于结果中的事务总数。例如,如果结果有3个事务编号(1、2、3),则while语句会回显“1、1、1、2、2、3、3、3”,而不仅仅是“1、2、3”

我知道这很简单,但它让我毛骨悚然。请帮助:

    if(!isset($_GET['PeopleID'])){
      header('Location: people.php');
      die();
    } else {
      if(!filter_var($_GET['PeopleID'], FILTER_VALIDATE_INT)){
        header('Location: people.php');
        die();
      } else {
        $PeopleID = filter_var($_GET['PeopleID'], FILTER_VALIDATE_INT);
        $query = "SELECT *
          FROM
            people
          LEFT JOIN notes ON 
            PersonID = PeopleID
          LEFT JOIN filenumbers ON 
            id = PeopleID   
          LEFT JOIN transactions ON 
            transactions.FileNumberID = filenumbers.FileNumberID
          LEFT JOIN filingdetails ON 
            filingdetails.FileID = filenumbers.FileNumberID
          WHERE PeopleID=:PeopleID";
  
         $result = $db_connection->prepare($query);
         $result->execute([
           'PeopleID' => $PeopleID
         ]);
       }
    }

    while($row = $result -> fetch()){
      echo $row['TransactionNumber'] . ", ";

    }

好的。。。因此,这是您的
SQL
查询的预期行为

当你以你所拥有的方式左键连接时,你会多次得到所有的数据。这最好用一个例子来解释

例子 假设您有三个表:

表1
=>您的主表

table2
=>与
table1的多对一关系

table1
id, value
1, a
2, b
3, c

table2
id, fkey, value
1, a, xxxx
2, a, cxcz
3, a, bdtht
4, a, nbtyt
5, b, ngftht
6, b, thhgfj
7, b, gjfhj
8, c, hjghj
9, c, jhgjh

table3
id, fkey, value
10, 2, sdgvgd
11, 2, gjkmhkjk
12, 3, kjhkl
13, 3, kljj
表3
=>与
表1的多对一关系

table1
id, value
1, a
2, b
3, c

table2
id, fkey, value
1, a, xxxx
2, a, cxcz
3, a, bdtht
4, a, nbtyt
5, b, ngftht
6, b, thhgfj
7, b, gjfhj
8, c, hjghj
9, c, jhgjh

table3
id, fkey, value
10, 2, sdgvgd
11, 2, gjkmhkjk
12, 3, kjhkl
13, 3, kljj
接下来,我们希望
表1
中选择
数据,同时使用
左连接合并
表2
中的数据

SELECT
    table1.id, table1.value, table2.id, table2.value
FROM table1
    LEFT JOIN table2 ON 
        table2.fkey = table1.id
上面的
SQL
的输出将如下所示

table1.id, table1.value, table2.id, table2.value
1, a, 1, xxxx
1, a, 2, cxcz
1, a, 3, bdtht
1, a, 4, nbtyt
2, b, 5, ngftht
2, b, 6, thhgfj
2, b, 7, gjfhj
3, c, 8, hjghj
3, c, 9, jhgjh
请注意,上面的输出实际上是
表1
中的每个选定行乘以
表2
中相应行的数量;或者

every row in table1 * table2 rows with fkey=table1.id 
所以,这很简单。如果我们现在看一个示例,其中有三个表和两个
左连接

SELECT
    table1.id, table1.value, table2.id, table2.value
FROM table1
    LEFT JOIN table2 ON 
        table2.fkey = table1.id
    LEFT JOIN table3 ON 
        table3.fkey = table1.id


table1.id, table1.value, table2.id, table2.value, table3.id, table3.value
1, a, 1, xxxx, null, null
1, a, 2, cxcz, null, null
1, a, 3, bdtht, null, null
1, a, 4, nbtyt, null, null
2, b, 5, ngftht, 10, 2, sdgvgd
2, b, 5, ngftht, 11, 2, gjkmhkjk
2, b, 6, thhgfj, 10, 2, sdgvgd
2, b, 6, thhgfj, 11, 2, gjkmhkjk
2, b, 7, gjfhj, 10, 2, sdgvgd
2, b, 7, gjfhj, 11, 2, gjkmhkjk
3, c, 8, hjghj, 12, 3, kjhkl
3, c, 8, hjghj, 13, 3, kljj, 
3, c, 9, jhgjh, 12, 3, kjhkl
3, c, 9, jhgjh, 13, 3, kljj
在这里您可以看到,我们现在的输出相当于:

every row in table1 * table2 rows with fkey=table1.id * table3 rows with fkey=table1.id

好的。。。因此,这是您的
SQL
查询的预期行为

当你以你所拥有的方式左键连接时,你会多次得到所有的数据。这最好用一个例子来解释

例子 假设您有三个表:

表1
=>您的主表

table2
=>与
table1的多对一关系

table1
id, value
1, a
2, b
3, c

table2
id, fkey, value
1, a, xxxx
2, a, cxcz
3, a, bdtht
4, a, nbtyt
5, b, ngftht
6, b, thhgfj
7, b, gjfhj
8, c, hjghj
9, c, jhgjh

table3
id, fkey, value
10, 2, sdgvgd
11, 2, gjkmhkjk
12, 3, kjhkl
13, 3, kljj
表3
=>与
表1的多对一关系

table1
id, value
1, a
2, b
3, c

table2
id, fkey, value
1, a, xxxx
2, a, cxcz
3, a, bdtht
4, a, nbtyt
5, b, ngftht
6, b, thhgfj
7, b, gjfhj
8, c, hjghj
9, c, jhgjh

table3
id, fkey, value
10, 2, sdgvgd
11, 2, gjkmhkjk
12, 3, kjhkl
13, 3, kljj
接下来,我们希望
表1
中选择
数据,同时使用
左连接合并
表2
中的数据

SELECT
    table1.id, table1.value, table2.id, table2.value
FROM table1
    LEFT JOIN table2 ON 
        table2.fkey = table1.id
上面的
SQL
的输出将如下所示

table1.id, table1.value, table2.id, table2.value
1, a, 1, xxxx
1, a, 2, cxcz
1, a, 3, bdtht
1, a, 4, nbtyt
2, b, 5, ngftht
2, b, 6, thhgfj
2, b, 7, gjfhj
3, c, 8, hjghj
3, c, 9, jhgjh
请注意,上面的输出实际上是
表1
中的每个选定行乘以
表2
中相应行的数量;或者

every row in table1 * table2 rows with fkey=table1.id 
所以,这很简单。如果我们现在看一个示例,其中有三个表和两个
左连接

SELECT
    table1.id, table1.value, table2.id, table2.value
FROM table1
    LEFT JOIN table2 ON 
        table2.fkey = table1.id
    LEFT JOIN table3 ON 
        table3.fkey = table1.id


table1.id, table1.value, table2.id, table2.value, table3.id, table3.value
1, a, 1, xxxx, null, null
1, a, 2, cxcz, null, null
1, a, 3, bdtht, null, null
1, a, 4, nbtyt, null, null
2, b, 5, ngftht, 10, 2, sdgvgd
2, b, 5, ngftht, 11, 2, gjkmhkjk
2, b, 6, thhgfj, 10, 2, sdgvgd
2, b, 6, thhgfj, 11, 2, gjkmhkjk
2, b, 7, gjfhj, 10, 2, sdgvgd
2, b, 7, gjfhj, 11, 2, gjkmhkjk
3, c, 8, hjghj, 12, 3, kjhkl
3, c, 8, hjghj, 13, 3, kljj, 
3, c, 9, jhgjh, 12, 3, kjhkl
3, c, 9, jhgjh, 13, 3, kljj
在这里您可以看到,我们现在的输出相当于:

every row in table1 * table2 rows with fkey=table1.id * table3 rows with fkey=table1.id

非常感谢。这非常有帮助。先生,您是一位绅士和学者。谢谢您!这非常有帮助。先生,你是一位绅士和学者。