使用PHP while循环显示多个表中的MySQL数据
经过几周的研究,我还没能解决这个问题。我简化了我的表结构和代码,希望能让这更容易 我有两个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是我最接近我想要的 我首先选择块数据:使用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列的数据) [未分配文件
$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”循环,它显示每个块名,但如果存在多个文件,则会将块名加倍。我需要在相关块名称下将文件分组在一起;在问题的最后,谢谢加布里埃尔。仅根据需要显示一次块名,但现在只有第一个文件显示在下面。。。