在PHP中,将数组与MySQL表中的字段进行比较



我有两个表;一个是位置名称列表,另一个是公司列表,其中一个字段存储公司运营的多个位置:

id  LocationName
1   Aberdeen
2   Dundee
3   Edinburgh
4   Glasgow

idCompany   CompanyName Locations
1           CompanyA    1, 2, 3, 4
2           CompanyB    2, 4
3           CompanyC    1
对于每个公司

的详细信息页面,我想列出他们经营的地点,并显示每个公司的名称。例如。对于B公司:

Dundee
Glasgow

等。

来自 VB 背景,我只是遍历每个数据集并比较每个数据集以找到匹配项,但这是在 PHP 中,我无法让它工作:

// Query for specific firm
    $sqlCompany= "SELECT * FROM company_details WHERE CompanyID='".$CompanyID."';";  
    $rstCompany= mysqli_query($conn, $sqlCompany);
    $row = mysqli_fetch_assoc($rstCompany);
// Query list of Locations
    $sqlLocationNames= "SELECT * FROM Locations ORDER BY LocationName ASC;";  
    $rstLocationNames= mysqli_query($conn, $sqlLocationNames);
// Explode the field of locations into an array:    
    $LocationArray = $row["Locations"];
    $LocationArray = explode (",", $LocationArray);
    for ($i = 0; $i < count($LocationArray); $i++) {
        while ($rowLocationNames = mysqli_fetch_assoc($rstLocationNames)) {
            if ($LocationArray[$i]==$rowLocationNames["idLocation"]) {
                echo $rowLocationNames["LocationName"]."<br />";
                }
            }
        }

为公司 A 运行此服务,我希望从上面获得四个位置的列表,但我只获得第一个位置(阿伯丁(。我已经尝试了我能想到的所有组合,但无济于事。我需要以这种方式保持数据结构,因为我打算在可以正常工作时选择一个多个来插入和编辑数据。有什么想法我哪里出错了吗?

与其在

数组的迭代中循环数据库提取,这会导致一旦您进入数组中的第二个条目(因此最多一个输出,如您所见(,只需循环数据库提取并使用in_array来确定是否输出位置名称:

   while ($rowLocationNames = mysqli_fetch_assoc($rstLocationNames)) {
       if (in_array($rowLocationNames["idLocation"], $LocationArray)) {
           echo $rowLocationNames["LocationName"]."<br />";
       }
   }

问题是从数据库读取位置名称的while循环嵌套在for循环中。在 for 循环的第一次迭代之后,数据库指针位于记录集的末尾,因此当您进行下一次迭代时,没有要读取的记录。

在进入for循环之前,请尝试将记录读入数组,然后使用 while 循环循环访问新创建的数组。

相关内容

  • 没有找到相关文章

最新更新