Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.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循环显示多个表中的MySQL数据_Php_Mysql_While Loop_Left Join - Fatal编程技术网

使用PHP while循环显示多个表中的MySQL数据

使用PHP while循环显示多个表中的MySQL数据,php,mysql,while-loop,left-join,Php,Mysql,While Loop,Left Join,经过几周的研究,我还没能解决这个问题。我简化了我的表结构和代码,希望能让这更容易 我有两个MySQL表;'“块”和“文件” “blocks”表有bwblock_id、bwblock_year和bwblock_name列 “files”表有file\u id、file\u name和bwblock\u id列 用户首先创建一个块。然后他们可以创建一个文件,并将其分配给一个块(bwblock_id是索引列) 然后我想显示如下内容: 块名称#1(来自bwblock#u NAME列的数据) [未分配文件

经过几周的研究,我还没能解决这个问题。我简化了我的表结构和代码,希望能让这更容易

我有两个MySQL表;'“块”和“文件”

“blocks”表有bwblock_id、bwblock_year和bwblock_name列

“files”表有file\u id、file\u name和bwblock\u id列

用户首先创建一个块。然后他们可以创建一个文件,并将其分配给一个块(bwblock_id是索引列)

然后我想显示如下内容:

块名称#1(来自bwblock#u NAME列的数据)

[未分配文件,仅显示块名称]

块名称#2

分配给块#2的第一个文件

分配给块#2的第二个文件

块名称#3

分配给块#3的第一个文件

分配给块#3的第二个文件

等等

下面的代码显示了我需要的所有内容,但列出了第一个块下的文件,而不是它实际所属的第三个块下的文件。如何将文件分配到正确的块下显示?它显然与block.bwblock_id和files.bwblock_id的排列有关,但我就是搞不清楚那是什么

我尝试了一个LEFT-JOIN语句,但下面的MySQL是我最接近我想要的

我首先选择块数据:

$query_RS_Blocks = "SELECT * FROM blocks WHERE bwblock_year = $variable ORDER BY bwblock_id ASC"
$row_RS_Blocks = mysql_fetch_assoc($RS_Blocks);
然后,我选择适用的文件:

"SELECT * FROM files WHERE bwblock_id IN (SELECT bwblock_id FROM blocks WHERE bwblock_year = $variable) ORDER BY file_name ASC"
$row_RS_Files = mysql_fetch_assoc($RS_Files);
我的精简PHP显示代码是:

do {
echo $row_RS_Block['block_name']; 
do {
 echo $row_RS_Files['file_name'];
   } 
while ($row_RS_Files= mysql_fetch_assoc($RS_Files));
          }
while ($row_RS_Blocks = mysql_fetch_assoc($RS_Blocks));
我还尝试将最后一行更改为:

while (($row_RS_Blocks = mysql_fetch_assoc($RS_Blocks)) && ($row_RS_Blocks['bwblock_id'] == $row_RS_Files['bwblock_id']));
然后在第一个块下插入第一个文件,在第二个块下插入第二个文件。(注意,在特定的文件查询中只返回两个文件。我想它会无限地为每个块分配一个文件。)


我现在很着急,但是如果我遗漏了任何必要的信息,请告知,我会尽快修改。

你能试试这个选择吗?让我知道它是否有效

SELECT b.bwblock_id, b.bwblock_year, b.bwblock_name, f.file_id, f.file_name 
FROM blocks AS b
LEFT JOIN files as f
ON b.bwblock_id=f.bwblock_id;

它几乎起作用了。我删除了内部“do while”循环,它显示每个块名,但如果存在多个文件,则会将块名加倍。我需要在相关块名称下将文件分组在一起;在问题的最后,谢谢加布里埃尔。仅根据需要显示一次块名,但现在只有第一个文件显示在下面。。。