繁体   English   中英

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

[英]Displaying MySQL data from several tables using PHP while loops

经过几周的研究,我无法解决此问题。 我简化了表结构和代码,希望可以简化此过程。

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

“块”表具有列bwblock_id,bwblock_year和bwblock_name。

“文件”表具有列file_id,file_name和bwblock_id。

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

然后,我想显示如下内容:

块名称1(来自bwblock_name列中的数据)

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

块名#2

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

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

块名#3

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

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

等等...

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

我已经尝试了LEFT JOIN语句,但是下面的MySQL是我得到所需的最接近的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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM