Получение и представление записей объединенных таблиц SQL с помощью PHP, Sqlite (или MySql) и HTML - PullRequest
0 голосов
/ 07 декабря 2009

Пожалуйста, держись со мной, пока я пытаюсь объяснить свой вопрос. У меня есть база данных Sqlite, в которой есть таблица, содержащая информацию о компании (компании), и таблица, содержащая информацию о продукте (продукты). Идентификатор таблицы Companies - Company_Name. Он соединен с таблицей «Продукты» именем компании. Например, у компании «А» может быть много продуктов, связанных с ней, через внутреннее объединение компаний по Company_Name = ProductID (ProductID состоит из названий компаний).

Я пытаюсь отобразить эту информацию, используя цикл php while, чтобы был список компаний с их соответствующими продуктами. Я не могу понять, как это сделать. Я могу зациклить отдельные записи, например, одну компанию с одним продуктом, но я не могу перечислить одну компанию с несколькими продуктами. Вот что я пытаюсь достичь:

Компания "А" - местонахождение ЦА продукт 1, продукт 2, продукт 3

Компания "С" - местонахождение ЦА продукт 3, продукт 4, продукт 6

Компания "F" - местонахождение ЦА продукт 1, продукт 8

В этом примере запрос будет обрабатывать все компании в Калифорнии (Калифорния).

Мой код выглядит следующим образом, но он не работает:

//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>";
  }
}

По сути, мой код дает мне одну компанию в Калифорнии и перечисляет все продукты, связанные со всеми компаниями в Калифорнии:

Компания "А" - местонахождение ЦА продукт 1, продукт 2, продукт 3, продукт 3, продукт 4, продукт 6, продукт 1, продукт 8

Я попытался удалить второй php "while loop", но получу следующее:

Компания "А" - местонахождение ЦА Продукт 1

Компания "А" - местонахождение ЦА Продукт 2

Компания "А" - местонахождение ЦА Продукт 3 ...

Хотя я использую Sqlite, если у кого-то есть пример в MySql или любом другом sql Db, это тоже очень поможет. Я думаю, что моя проблема связана с запросом и php "while loop".

Я очень ценю вашу помощь.

Спасибо,

DFM

1 Ответ

1 голос
/ 07 декабря 2009

Цикл Product Product выполняет цикл извлечения всех продуктов, потому что вы не «ломаетесь» при изменении 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;
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...