0

我有一个 Sqlite 数据库,其中有一个由公司信息(Companies)组成的表和一个由产品信息(Products)组成的表。Companies 表 ID 是 Company_Name。它通过 Company_Name 与 Products 表连接。例如,公司“A”可以通过 Company_Name = ProductID(ProductID 由公司名称组成)上的内部连接 ​​Companies 关联许多产品。

我正在尝试使用 php while 循环显示此信息,以便列出公司及其各自产品的列表。我无法弄清楚如何做到这一点。我可以循环单个记录,例如一个公司有一种产品,但我不能列出一个公司有多种产品。以下是我想要实现的目标:

公司“A” - 位置 CA 产品 1、产品 2、产品 3

公司“C” - 位置 CA 产品 3、产品 4、产品 6

公司“F” - 位置 CA 产品 1、产品 8

在此示例中,查询将提取加利福尼亚 (CA) 的所有公司。

我的代码如下,但它不起作用:

//srchtext is the value in a HTML text box//
$txt = $_GET["srchtext"];
$dbstate = @$db->query("SELECT Company.Company_Name, Company.Company_City, Company.Company_State, Company.Company_Website, Company.Company_Service, Categories.Category_Name, Products.Product_Name FROM Company INNER JOIN Products On Company_Name = ProductID WHERE Company_State = '$txt'");
 while ($hmstate = $dbstate->fetchArray()){
echo "<ul>";
echo "<font id='srchclr'; color='#666666';>";
echo '<strong>'.$hmstate['Company_Name'].'</strong>'.'<br>'.$hmstate['Company_City'].','.$hmstate['Company_State'].'<br>'.
'<a href='.$hmstate['Company_Website'].'>'.$hmstate['Company_Website'].'</a>'.'<br>'.'<ul>'.
'<br>'.'<strong>Products or Services Provided by this Company:</strong>'.'<br>'.'<br>'.'<ul>'.$hmstate['Company_Service'].'</ul>';
echo "<br>";
echo "<strong>Company Product Category:</strong>";
echo "<br>";
echo "<br>";
  //Product loop//
  While ($hmstate = $dbstate->fetchArray()) {
  echo "<ul>";
  echo $hmstate['Product_Name'];
  echo "</ul>";
  }
}

基本上,我的代码给了我加利福尼亚的一家公司,并列出了与加利福尼亚所有公司相关的所有产品:

公司“A” - 位置 CA 产品 1、产品 2、产品 3、产品 3、产品 4、产品 6、产品 1、产品 8

我尝试取出第二个 php“while 循环”,但是我会得到以下信息:

公司“A” - 位置 CA 产品 1

公司“A” - 位置 CA 产品 2

公司“A” - 位置 CA 产品 3...

虽然我使用的是 Sqlite,但如果有人在 MySql 或任何其他 sql Db 中有一个示例,那也会很有帮助。我认为我的问题在于查询和 php“while 循环”。

4

1 回答 1

1

您的 Product while 循环正在获取所有产品,因为当 Company_Name 更改时您不会“中断”。

我的 PHP 不好,但可能是这样的:

.
.
(Your company PHP code here)
.
.

//Product loop//
if ($hmstate = $dbstate->fetchArray()) {
$fetch_okay = true;
$Current_Company_name = $hmstate['Company_Name'];
$same_Company = true;
}

While (fetch_okay && same_Company) {
  echo "<ul>";
  echo $hmstate['Product_Name'];
  echo "</ul>";

  $fetch_okay = false;
  $same_Company_Name = false;
  if ($hmstate = $dbstate->fetchArray()) {
    $fetch_okay = true;
    if ($hmstate['Company_Name'] = $current_Company_name) {
      $same_Company_Name = true;
    }
  }
}
于 2009-12-07T15:35:28.073 回答