Как я могу сократить эту часть кода? - PullRequest
0 голосов
/ 15 апреля 2019

Я только знаю, что эта часть кода не подходит для высокопроизводительного веб-приложения, потому что он потратил много времени при выполнении двух SQL-запросов вместо одного. Я хочу прочитать ваши предложения об этой части кода. Кроме того, я хочу прочитать ваш код решения этого. Код работает нормально.

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

Заранее спасибо

<html>
<body>
    <select name="category">
        <option value="category">category name</option>
        <?php
        $sql = "SELECT category.name as cat, article.name as art from category
        JOIN article ON category.id = article.id";
        $query = mysqli_query($conn, $sql);
        while($row = mysqli_fetch_array($query)){
        echo "
        <option value='".$row["cat"]."'>".$row["cat"]."</option>";
        }
        mysqli_close($conn);
        ?>
    </select>
    <select name="article">
        <option value="articlename">article name</option>
        <?php
        $sql = "SELECT category.name as cat, article.name as art from category
        JOIN article ON category.id = article.id";
        $query = mysqli_query($conn, $sql);
        while($row = mysqli_fetch_array($query)){
        echo "
        <option value='".$row["art"]."'>".$row["art"]."</option>";
        }
        mysqli_close($conn);
        ?>
    </select>
</body>
</html>

Ответы [ 2 ]

1 голос
/ 15 апреля 2019

Вам не нужно делать 2 соединения с БД для получения одинаковых данных.Вы можете создать коллекцию объектов и использовать их на месте, например ...

<?php
  $arr = [];

  $sql = "SELECT category.name as cat, article.name as art from category 
  JOIN article ON category.id = article.id";

  $query = mysqli_query($conn, $sql);

  while($row = mysqli_fetch_array($query)){
      $obj = (object) [
          "cat" => $row["cat"],
          "art" => $row["art"]
      ];

      array_push($arr, $obj);
  }

  mysqli_close($conn);
?>

<select name="category">
<option value="category">category name</option>
foreach($arr as $obj) {
    ?>
        <option value='"<?php echo $obj->cat; ?>"'><?php echo $obj->cat; ?></option>
    <?php
}

<select name="article">
<option value="articlename">article name</option>
foreach($arr as $obj) {
    ?>
        <option value='"<?php echo $obj->art; ?>"'><?php echo $obj->art; ?></option>
    <?php
}

0 голосов
/ 15 апреля 2019

Вы можете подготовить строки, которые будут содержать <option> в 1 цикле, а затем просто отобразить их.

Например:

<?php
$sql = "SELECT category.name as cat,
               article.name as art
        FROM category 
        JOIN article
        ON category.id = article.id";
$query = mysqli_query($conn, $sql);
$articles = "";
$categories = "";
while($row = mysqli_fetch_array($query)) {
    $categories .= "<option value='" . $row["cat"] . "'>" . $row["cat"] . "</option>";
    $articles .= "<option value='" . $row["art"] . "'>" . $row["art"] . "</option>";
}
mysqli_close($conn);
?>
<select name="category">
    <option value="category">category name</option>
    <?php echo $categories; ?>
</select>
<select name="article">
    <option value="articlename">article name</option>
    <?php echo $articles; ?>
</select>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...