[英]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.